【一次過】Lintcode 114. 不同的路徑
阿新 • • 發佈:2018-12-15
有一個機器人的位於一個 m × n 個網格左上角。
機器人每一時刻只能向下或者向右移動一步。機器人試圖達到網格的右下角。
問有多少條不同的路徑?
樣例
給出 m = 3
和 n = 3
, 返回 6
.
給出 m = 4
和 n = 5
, 返回 35
.
注意事項
n和m均不超過100
解題思路:
確定狀態:
最後一步:無論機器人用何種方式到達右下角,最後一步挪動總是從左邊或上邊來。
子問題:設dp[i][j]為機器人有多少種方式從左上角走到[i][j]。
則狀態方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]
初始條件:
dp[0][0] = 1
邊界條件:
i=0 或 j=0,則前一步只能由一個方向過來
public class Solution { /** * @param m: positive integer (1 <= m <= 100) * @param n: positive integer (1 <= n <= 100) * @return: An integer */ public int uniquePaths(int m, int n) { // write your code here if(m==0 || n==0) return 0; int[][] dp = new int[m][n]; //初始條件 dp[0][0] = 1; //邊界條件 for(int i=1 ; i<dp.length ; i++) dp[i][0] = dp[i-1][0]; for(int j=1 ; j<dp[0].length ; j++) dp[0][j] = dp[0][j-1]; //狀態方程 for(int i=1 ; i<dp.length ; i++) for(int j=1 ; j<dp[0].length ; j++) dp[i][j] = dp[i-1][j] + dp[i][j-1]; return dp[m-1][n-1]; } }