当前的数目 = 同行上列 + 同列上行 回溯法把爷逗乐了,runtime爆炸。所以肯定是DP
DP:
public class Solution { public int uniquePaths(int m, int n) { int[][] ways = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i == 0 || j == 0) ways[i][j] = 1; else ways[i][j] = ways[i-1][j] + ways[i][j-1]; } } return ways[m-1][n-1]; } }
第一行和第一列的值只能是1,因为只有一种方法,第一行:向右,第一列:向下。
其余的,就是到达 (i , j) 的路径数 == 到达(i-1,j)的途径 + 到达(i,j-1)的途径。
还有种方法,是节省了space,只用了一维数组
public class Solution { public int uniquePaths(int m, int n) { int[] ways = new int[n]; ways[0] = 1; for(int i = 0; i < m; i++) for (int j = 1; j < n; j++) ways[j] += ways[j-1]; return ways[n-1]; } }