1. 程式人生 > >【一次過】Lintcode 114. 不同的路徑

【一次過】Lintcode 114. 不同的路徑

有一個機器人的位於一個 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];
    }
}