題目描述
一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。
問總共有多少條不同的路徑?
說明:m 和 n 的值均不超過 100。
解題思路:
用動態規劃Dynamic Programming來解,我們可以維護一個二維數組dp,其中dp[i][j]表示到當前位置不同的走法的個數,然後可以得到遞推式爲:
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
爲了節省空間,也可以用一維數組實現
代碼實現
class Solution {
public int uniquePaths(int m, int n) {
int[] dp = new int[n];
for(int i=0;i<dp.length;i++){
dp[i]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[j]+=dp[j-1];
}
}
return dp[n-1];
}
/**
使用二維數組求解的方法:
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if (i == 0 && j == 0) {
dp[i][j] = 1;
} else if (i == 0) {
dp[i][j] = dp[i][j - 1];
} else if (j == 0) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
}
return dp[m - 1][n - 1];
}
*/
}