题目地址:62. 不同路径
动态规划:初始化一个m行n列数组,数组里的数据表示到达这个点存在的路径条数。首先需要考虑边界,因为只能向下或向右,所以边界值都为1,即位于起始点的那一行和那一列数字都是1。到达终点前的一步有两种可能,一种是向右,一种向下,将两种可能的路径条数相加,得到总路径条数:
class Solution {
public int uniquePaths(int m, int n) {
int chs[][] = new int[m][n];
//第0列都为1
for (int i = 0; i < m; i++) {
chs[i][0]=1;
}
//第0行都为1
for (int j = 0; j < n; j++) {
chs[0][j]=1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
chs[i][j] = chs[i-1][j]+chs[i][j-1];
}
}
return chs[m-1][n-1];
}
}
结果:
还有种排列组合的方法,由于向下和向右的步数都是固定的,都是向下m-1步,向右n-1步,在m+n-2空格中寻找m-1步向下走。
class Solution {
public int uniquePaths(int m, int n) {
double tmp = 1;
for (int i = 1; i < m; i++) {
tmp *=(i+n-1);
tmp /= i;
}
int res = (int)tmp;
return res;
}
}
结果: