LintCode_不同的路徑

問題描述:

有一個機器人的位於一個M×N個網格左上角(下圖中標記爲'Start')。

機器人每一時刻只能向下或者向右移動一步。機器人試圖達到網格的右下角(下圖中標記爲'Finish')。問有多少條不同的路徑?
樣例
1,1
1,2
1,3
1,4
1,5
1,6
1,7
2,1






3,1





3,7

以上3 x 7的網格中,有多少條不同的路徑?

注意:n和m均不超過100


算法思想:關鍵點在於:(m,n)=(m-1,n)+(m,n-1);

方法一:遞歸算法(這種算法雖然可以用,但是比較耗時間)

public int uniquePaths(int m, int n) {
        if(m==1||n==1){
            return 1;
        }
        
        if(m==2){
            return n;
        }
        
        if(n==2){
            return m;
        }
        return uniquePaths(m-1,n)+uniquePaths(m,n-1);
       }


方法二:採用數組存儲路徑數:

public int uniquePaths(int m, int n) {
        

int[][] path=new int[100][100];


for(int i=0;i<n;i++){
            path[0][i]=1;
        }
        
        for(int j=0;j<m;j++){
            path[j][0]=1;
        }
        
        for(int p=1;p<m;p++){
            for(int q=1;q<n;q++){
                path[p][q]=path[p-1][q]+path[p][q-1];
            }
        }

        return path[m-1][n-1];
    }


發佈了64 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章