LC 62 不同的路径
dp数组以及下标的含义
dp[i][j]:从起点到第i行第j列的方案数为dp[i][j]
递推公式
这么想,当前状态可以由哪些状态得到?由于它只能向下或向右走,所以就只能向下走到第i行第j列或向右走到第i行第j列
所以dp[i][j]=dp[i-1][j]+dp[i][j-1]
dp数组如何初始化
当i等于1的时候,dp[0][1]和dp[1][0]的值是多少?从起点到dp[0][1]的方案就只有一种,就是向右走,其实dp[0][i]的值都是1,因为就只有一种方案就是一直向右走,那么对于dp[1][0]呢?也只有一种方案1,dp[1][i]都是1
遍历顺序
由于dp[i][j]=dp[i-1][j]+dp[i][j-1]
,所以应该从上到下,从左到右
打印dp数组
代码
class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];Arrays.fill(dp[0],1);int i=0,j=0;for(i=0;i<m;i++)dp[i][0]=1;for(i=1;i<m;i++){for(j=1;j<n;j++)dp[i][j] = dp[i-1][j]+dp[i][j-1];}return dp[m-1][n-1];}
}
扩展
也就是LC 63,这个多了一个障碍物的东西,待会再写吧