题目:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
思路:
首先,看到这种题目应该第一时间想到动态规划
其次,由于是两个参数/路径,也可以很简单的想到建立坐标系
一开始直接使用动态规划导致超时
其实这种两个参数的题目可以先想想是否使用矩阵,
利用遍历矩阵的方式实现赋值,最后输出最终结点的数据。
代码:
public static int uniquePaths(int m, int n) {
int[][] f = new int[m][n];
f[0][0] = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i > 0 && j > 0) {
f[i][j] = f[i - 1][j] + f[i][j - 1];
} else if (i > 0) {
f[i][j] = f[i - 1][j];
} else if (j > 0) {
f[i][j] = f[i][j - 1];
}
}
}
return f[m - 1][n - 1];
// return findPaths(m-1, n-1, 0,0);
}
// 最初思路 -- 超时
public static int findPaths(int m, int n, int a, int b) {
if (a==m && b==n) {
return 1;
}
if (a>m || b > n) {
return 0;
}
else {
return findPaths(m,n,a,b+1) + findPaths(m,n,a+1,b);
}
}