题目描述
题目来源:
https://leetcode-cn.com/problems/unique-paths/
题解
动态规划经典题目,比起青蛙跳台阶,使用二维数组更易理解;
1 首先定义数组元素dp[i][j], dp[i][j]表示走到终点时所有的路径,那我们所求的dp[m-1][n-1]为我们所要求的答案。
2 要最终走到(i,j)位置,有两种走法,第一种是从dp[i-1][j],第二种是从dp[i][j-1],也就是最终到达有两种情况,向下和向右,那么所有的情况为dp[i][j]=dp[i-1][j]+dp[j-1][i]
3 考虑边界问题,当i或j为0时,i-1/j-1会发生数组越界,即对应着横纵坐标其中一个为0,只能向下走和向右走的情况。
代码如下
class Solution {
public int uniquePaths(int m, int n) {
int [][]dp=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0||j==0){
dp[i][j]=0;
}
else{
dp[i][j]=dp[i-1][j]+dp[j-1][i];
}
}
}
return dp[m-1][n-1];
}
}