卡尺 东莞网站建设,wordpress自定义分类调用,群晖中使用wordpress,网络销售新手入门#x1f388;算法那些事专栏说明#xff1a;这是一个记录刷题日常的专栏#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目#xff0c;在这立下Flag#x1f6a9; #x1f3e0;个人主页#xff1a;Jammingpro #x1f4d5;专栏链接… 算法那些事专栏说明这是一个记录刷题日常的专栏每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目在这立下Flag 个人主页Jammingpro 专栏链接算法那些事 每日学习一点点技术累计看得见 题目
题目描述
一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 “Start” 。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角在下图中标记为 “Finish” 。 问总共有多少条不同的路径
执行示例 示例 1 输入m 3, n 7 输出28 示例 2 输入m 3, n 2 输出3 解释 从左上角开始总共有 3 条路径可以到达右下角。 1.向右 - 向下 - 向下 2.向下 - 向下 - 向右 3.向下 - 向右 - 向下 示例 3 输入m 7, n 3 输出28 示例 4 输入m 3, n 3 输出6 提示
1 m, n 100 题目数据保证答案小于等于 2 * 1 0 9 10^9 109
题解
以示例1为例因为机器人只能向右或向下移动因而到达第0行和第0列各个方格的方法数均为1。而到达map[i][j]的方法数等于map[i-1][j]map[i][j-1]即当前方格同一列的上一行方法数当前方格同一行的前一列方法数加和。因为可以从上面一个方格向下走1步到达当前方格也可以从左侧方格走1步到达当前方格。如下图所示通过不断执行map[i][j]map[i-1][j]map[i][j-1]最终map[m-1][n-1]中将保存到达右下角方格的方法数。 从而我们可以得到如下代码↓↓↓
class Solution {
public:int uniquePaths(int m, int n) {vectorvectorintmap(m,vectorint(n));//将第0行初始化为1for(int i 0; i n; i){map[0][i] 1;}//将第0列初始化为1for(int i 0; i m; i){map[i][0] 1;}for(int i 1; i m; i){for(int j 1; j n; j){map[i][j]map[i-1][j]map[i][j-1];}}return map[m-1][n-1];}
};这里我们使用了两次循环去初始化第0行和第0列我们可以通过多开辟一行一列并将map[0][1]初始化为1这时我们就不再需要初始化第1行第1列。而我们的结果保存在map[m][n]。 ps这个方法很巧妙就是不大好描述。大家看一下下方代码大脑运行一下。↓↓↓
class Solution {
public:int uniquePaths(int m, int n) {vectorvectorintmap(m 1, vectorint(n 1));map[0][1] 1;for(int i 1; i m; i)for(int j 1; j n; j)map[i][j] map[i - 1][j] map[i][j - 1];return map[m][n];}
};本文存在不足欢迎留言或私信批评、指正。希望我的解决方法能够对你有所帮助~~ 今日打卡完成点亮小星星☆→★