一个机器人位于一个 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int uniquePaths(int m, int n){
int dp[m][n];
int i,j;
for(int i = 0;i < m;++i){
for(int j = 0;j < n;++j){
if(i == 0 || j == 0){
dp[i][j] = 1;使边界上的点为1
}
else{
dp[i][j] = dp[i-1][j]+dp[i][j-1];到该点的路径是上面和左面的相加
}
}
}
return dp[m-1][n-1];
}
该题运用了动态规划的方法 。
规划算法介绍
1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法
2)动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
3)与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )
4)动态规划可以通过填表的方式来逐步推进,得到最优解.
这个题代码不是很难,但是难在如何理解
问总共有多少条不同的路径?
0 1 2 3 4 5 6
机器人 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 3 | 6 | 10 | 15 | 21 | 28 |
这是通过解题思路所画的题,我也是看了视频才明白,这是我看了视频自己的理解,因为只能向下和向右所以上边框和右边框只能是一,因为只有一种方法可以到达,(1,1)的2很容易可以看出来,(2,1)也可以看出来然后依次类推可以得知到达一个格的的路径是上一个格和和左面格相加得到的,然后就可以写了,我也是刚学动态规划,所有我认为这个题可以让我们对动态规划有一个更好的了解,我也希望对你们也有所帮助。