● 62.不同路径 注意只能想左或者向右
1.定义一个二维的dp数组:dpi:到达第i行第j列有多少中路径,而不是有多少步
2.递推公式: dpi = dpi-1 + dpi; //往右和往下走不都是一种路径嘛,所以不需要加1
4.遍历顺序 for(int i = 0;i<n;i++){ dp0 = 0 }
class Solution { public int uniquePaths(int m, int n) { int[][] travel = new int[m][n]; //终点是在travel[m-1][n-1]的位置 //initialize for(int i = 0;i<m;i++){ travel[i][0] = 1; } for(int i = 0;i<n;i++){ travel[0][i] = 1; } for(int i = 1;i<m;i++){ for(int j = 1 ;j<n;j++){ travel[i][j] = travel[i-1][j]+travel[i][j-1]; } } return travel[m-1][n-1]; } }
● 63. 不同路径 II
dp含义和上道题目的定义是一样的
for(int i = 0;i<m&&obsi = 0;i++){ dpi = 1; }
class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { //首先要确认表格有多少行多少列 int m = obstacleGrid.length; int n = obstacleGrid[0].length; //初始化 int[][] dp = new int[m][n]; for(int i = 0;i<m&&obstacleGrid[i][0]==0;i++){ dp[i][0] = 1; } for(int j = 0;j<n&&obstacleGrid[0][j]==0;j++){ dp[0][j] = 1; } for(int i = 1;i<m;i++){ for(int j =1;j<n;j++){ //如果没有障碍才能继续走下去 dp[i][j] = (obstacleGrid[i][j]==0)?dp[i-1][j]+dp[i][j-1]:0; } } return dp[m-1][n-1]; } }