Leetcode:62. 不同路徑
阿新 • • 發佈:2018-12-18
一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
問總共有多少條不同的路徑?
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?
說明:m 和 n 的值均不超過 100。
解題思路:
乍一看像是個搜尋演算法,仔細一想並不是,因為他只能往下或者往右!!!用函式Road(x,y)來描述x,y到終點的路徑數目。首先要想到這個遞推關係:
Road(x,y)=Road(x+1,y)+Road(x,y+1);
注意圖是有邊界的,上面圖中終點在(7,3),於是Road(6,3)=Road(7,2)=1。仔細觀察可以發現最後一行和最後一列除終點外Road(x,y)都等於1。確定這些值就完全可以求出整個圖的Road(x,y)了。求解的順序是最後一列到第一列,每一列都是自底向上搜尋。最終輸出Road(0,0)即可。
演算法的時間複雜度為格子的總個數。
class Solution { public: int uniquePaths(int m, int n) { vector<vector<int>> data(n, vector<int>(m, 1)); if (m == 1 || n == 1) return 1; for (int j = m - 1; j >= 1; j--) { for (int i = n - 1; i >= 1; i--) { data[i - 1][j - 1] = data[i][j - 1] + data[i - 1][j]; } } return data[0][0]; } }; |