不同路径

解析: 首先确定状态表示:根据经验和题目要求,将 dp[i][j] 表示为到达 i, j 位置一共有多少条路径。
接着推导状态转移方程:要到达 i, j 位置有两种方式,要么从 i-1, j 向下达到,要么从 i, j-1 向右达到。将到达 i-1, j 和到达 i, j-1 的路径数相加即可得到到达 i, j 位置的方式数。即 dp[i][j] = dp[i-1][j] + dp[i][j-1]。

初始化: 为了方便填表不发生越界,决定多开一列和一行。

蓝色区域是多开的空间,因为状态转移方程要用到上面和左边的状态数值。为了避免在求原数组第一行和第一列发生越界,就多开了这部分空间。如果不开,就要在填表之前把第一行和第一列提前填好。
初始化要注意填表的正确性,必须保证第一行和第一列是正确的状态数值。

第一个状态数值应该为多少?状态表示是到达某个位置一共有多少条路径,那么达到第一个位置应该是一条路径,所以要确保 dp[1][1] = 1 的话,只需要 dp[0][1] 或者 dp[1][0] 其中一个等于 1 即可,其他全部初始化为 0。
填表顺序: 从上到下,从左到右。
返回值: 直接返回 dp[m][n] 即可。
class Solution {
public int uniquePaths(int m, int n) {
// 建表
int[][] dp = new int[m + 1][n + ];
( ; i <= m; i++) {
( ; j <= n; j++) {
dp[i][j] = dp[i - ][j] + dp[i][j - ];
}
}
dp[m][n];
}
}







