1. 程式人生 > 其它 >leetcode-62. 不同路徑

leetcode-62. 不同路徑

第一種方法 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, int
n, 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]; } };