leetcode 62. 不同路径

 只用一维数组:

/**
滚动数组:O(mn) time,O(n) space
**/

class Solution {
public:
    int uniquePaths(int m, int n) {
        if(n==0||m==0) return 0;
        vector<int> dp(n,1);
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++)
                dp[j]=dp[j]+dp[j-1];
        }
        return dp[n-1];
    }
};

O(mn)time O(mn) space

从左上角更新,每次坐标i,j的最多路径为:dp[i][j]=dp[i][j+1]+dp[i+1][j]
class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m==0 || n==0) return 0;
        int dp[m][n];
        for(int j=0;j<n;j++){
            dp[m-1][j]=1;
        }
        for(int i=0;i<m;i++){
            dp[i][n-1]=1;
        }
        for(int i=m-2;i>=0;--i){
            for(int j=n-2;j>=0;--j){
                dp[i][j]=dp[i][j+1]+dp[i+1][j];
            }
        }
        return dp[0][0];
    }
};
posted @ 2019-05-07 23:57  Joel_Wang  阅读(157)  评论(0编辑  收藏  举报