思路:
是动态规划的第一种
代码:
class Solution {
public int uniquePaths(int m, int n) {
int[][] dp=new int[m][n];
for(int i=0;i<m;i++){
dp[i][0]=1;
}
for(int i=0;i<n;i++){
dp[0][i]=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];
}
}
分解:
1)当前dp[i][j]只与前一个有关,要么是dp[i-1][j],要么是dp[i][j-1]
所以结果是2个可能的情况相加
2)注意边界,最后是返回dp[m-1][n-1]
可以与下题做对比,此题的0行0列初始化为1,而下题的初始化为0
(https://blog.csdn.net/di_ko/article/details/116483756)
复杂度分析:
时间复杂度:O(m*n)
空间复杂度:O(m*n)