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];
    }
};

 

上一篇:21/9/9补题


下一篇:数据结构_图的遍历