leetcode-62. 不同路徑
阿新 • • 發佈:2021-07-17
第一種方法 DFS 果然超時
class Solution { public: int count = 0; int uniquePaths(int m, int n) { vector<vector<bool>> visited(m, vector<bool>(n,false)); path(visited,m,n,0,0); return count; } void path(vector<vector<bool>> visited, int m, intn, int i, int j){ if(i<0||i>=m||j<0||j>=n||visited[i][j]) return; if(i==m-1&&j==n-1){ count++; return; } visited[i][j] = true; path(visited,m,n,i,j+1); path(visited,m,n,i+1,j); visited[i][j]= false; // 復原 } };
第二種方法 動態陣列,同動態陣列這題則和跳樓梯類似,每次只能跳一個或者兩個臺階,跳到n階有多少種跳法
class Solution { public: int count = 0; int uniquePaths(int m, int n) { // 如果全部直接初始化為1,省掉了定義basecase這部 vector<vector<int>> dp(m, vector<int>(n,1)); // dp陣列含義,從左上角到i,j一共有多少種不同路徑。// //basecase // for (int i = 0; i < m; ++i) { // dp[i][0] = 1; // 左上角到dp[i][0]顯然只有一條路徑 // } // for (int j = 0; j < n; ++j) { // dp[0][j] = 1; // } for(int i = 1; i < m; i++) for(int j = 1; j < n; j++){ dp[i][j] = dp[i][j-1] + dp[i-1][j]; } return dp[m-1][n-1]; } };