代码随想Day39 | 62.不同路径、63. 不同路径 II

62.不同路径 

每次向右或者向下走两个选择,定义dp数组dp[i][j] 为到达索引ij的路径和,状态转移公式为

dp[i][j]=dp[i-1][j]+dp[i][j-1],初始状态的第一行和第一列为1,从左上到右下开始遍历即可。详细代码如下:

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>>dp (m,vector<int>(n,1));for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
};

为了优化空间复杂度,可以用一个一维数组,因为一定是先更新左边的值再更新右边的值。

详细代码如下:

class Solution {
public:int uniquePaths(int m, int n) {vector<int>dp (n,1);for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[j]+=dp[j-1]; //当前dp为从上方路径来,dp[j-1]为从左方来}}return dp[n-1];}
};

63. 不同路径 II 

这道题和上一道思路一样,但是这道有障碍物,需要注意有障碍物的索引,到达该处的路径和为0,根据这个条件,增加处理逻辑即可,整体的转移方程还是

详细代码如下:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if(obstacleGrid.empty()) return 0;vector<vector<int>>dp(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));int m = obstacleGrid.size();int n = obstacleGrid[0].size();for(int i=0;i<m;i++){if(obstacleGrid[i][0]==1||i>0&&dp[i-1][0]==0) dp[i][0]=0;else dp[i][0] = 1;}for(int j=1;j<n;j++){if(obstacleGrid[0][j]==1||dp[0][j-1]==0) dp[0][j]=0;else dp[0][j] = 1;}for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(obstacleGrid[i][j]==1) dp[i][j]=0;else dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
};

感觉这道题的优化空间版本细节有点多,但还是附上代码:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if(obstacleGrid.empty()) return 0;int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<int>dp (n,0);for(int j=0;j<n;j++){if(obstacleGrid[0][j]==1||j>0&&dp[j-1]==0) dp[j]=0;else dp[j] = 1;}for(int i=1;i<m;i++){for(int j=0;j<n;j++){if(obstacleGrid[i][j]==1) dp[j]=0;else if(j>0) dp[j] = dp[j]+dp[j-1];}}return dp[n-1];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283241.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EM(Expectation-Maximum)算法

EM算法 简介 EM算法的核心分为两步 E步&#xff08;Expection-Step&#xff09;M步&#xff08;Maximization-Step&#xff09; 因为在最大化过程中存在两个参量 r , θ r,\theta r,θ&#xff0c;其中若知道 r r r&#xff0c;则知道 θ \theta θ&#xff1b;若知道 θ \…

python的安装包安装教程,python怎么安装工具包

本篇文章给大家谈谈python的安装包安装教程&#xff0c;以及python怎么安装工具包&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 非商业转载&#xff0c;来自简书-虞大胆的叽叽喳喳-杰作的&#xff1a;在Python中安装包的三种方法 - 简书 最近一段时间都在学…

C语言数据结构-----二叉树(3)二叉树相关练习题

前言 前面详细讲述了二叉树的相关知识&#xff0c;为了巩固&#xff0c;做一些相关的练习题 文章目录 前言1.某二叉树共有 399 个结点&#xff0c;其中有 199 个度为 2 的结点&#xff0c;则该二叉树中的叶子结点数为&#xff1f;2.下列数据结构中&#xff0c;不适合采用顺序存…

【数据分析之Numpy】Numpy中复制函数numpy.repeat()与numpy.tile()的使用方法及区别

一、简介 numpy.repeat()与numpy.tile()都是Numpy库中的复制函数&#xff0c;用于将数组中的元素重复指定的次数。 numpy.repeat()函数接受三个参数&#xff1a;要重复的数组、重复的次数和重复的轴。 numpy.tile()函数接受两个参数&#xff1a;要重复的数组和重复的次数。 二…

mipi dsi协议DBI/DPI接口

MIPI dsi协议中的DBI/DPI接口主要用于主机和display设备之间的数据传输&#xff0c;说的更通俗一点就是DSI RX控制器和实际的显示面板之间的接口&#xff1b;dsi 协议spec中对DBI/DPI有描述&#xff1a; DSI协议中对DBI 接口模式命名为command mode operation&#xff0c;对DP…

动态加载库

no_mangle 不要改标识符 首先是认识这个标注&#xff1a;mangle&#xff0c;英文的含义“撕裂、碾压”。我第一次把这个单次误以为是manage&#xff0c;说实话两个单词还挺像的。 RUS中函数或静态变量使用#[no_mangle]这个标注属性后&#xff0c;编译器就不会修改它们的名字了…

数据分析为何要学统计学(10)——如何进行比率检验

比率检验是通过样本推测某种事件的总体占比水平。要求事件仅有互斥的两种情况&#xff0c;即&#xff0c;概率分别为p与1-p。 比率检验分单样本和双样本两种情况&#xff0c;以下我们分别介绍。 1. 单样本比率检验 形如这样的问题&#xff1a;“小学生近视比例日益提高&#…

C# WPF上位机开发(知识产权ip保护)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发&#xff0c;这个时候大部分上位机基本上都是白送的&#xff0c;不会收取相关的费用。但是&#xff0c;如果上…

机器学习算法---异常检测

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

pytorch——支持向量机

1、任务要求 针对已知类别的5张卧室照片(标签为1)和5张森林照片(标签为-1)所对应的矩阵数据进行分类训练,得到训练集模型;再利用支持向量机对另外未知类别的5张卧室照片和5张森林照片数据进行测试分类(二分类)&#xff0c;得到分类结果及其准确率。 2、先导入查看基本数据 3、…

英文论文降重修改技巧 papergpt

大家好&#xff0c;今天来聊聊英文论文降重修改技巧&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 英文论文降重修改技巧 作为网站编辑&#xff0c;我们经常需要处理大量…

【Redis】AOF 基础

因为 Redis AOF 的实现有些绕, 就分成 2 篇进行分析, 本篇主要是介绍一下 AOF 的一些特性和依赖的其他函数的逻辑,为下一篇 (Redis AOF 源码) 源码分析做一些铺垫。 AOF 全称: Append Only File, 是 Redis 提供了一种数据保存模式, Redis 默认不开启。 AOF 采用日志的形式来记…