*LeetCode 62. Unique Paths 记忆化搜索 or 组合数学

来源:互联网 发布:java中异步请求 编辑:程序博客网 时间:2024/06/05 20:45

https://leetcode.com/problems/unique-paths/


记忆化搜索的本质就是dp, 但是涉及图的时候 有时候思考会更顺一些


const int SIZE = 101;class Solution {public:    int uniquePaths(int m, int n) {        for(int i=0;i<m;i++) {            for(int j=0;j<n;j++)                dp[i][j] = -1;        }        return dfs(0,0, m, n);    }    int dfs(int hang, int lie, int m, int n) {        if(dp[hang][lie] >= 0 )return dp[hang][lie];        if(hang == m-1 && lie == n-1) return (dp[m-1][n-1]=1);        int ret = 0;        if(hang+1 < m) ret += dfs(hang+1,lie, m, n);        if(lie+1 < n) ret += dfs(hang, lie+1, m, n);        return (dp[hang][lie]=ret);    }private :    int dp[SIZE][SIZE];};


当然也可以dp:逆向思维

const int SIZE = 101;class Solution {public:    int uniquePaths(int m, int n) {        for(int i=0;i<m;i++)            for(int j=0;j<n;j++) {                if(i == 0 && j == 0) dp[i][j] =1;                else {                    dp[i][j] = 0;                    if(i-1 >=0) dp[i][j] += dp[i-1][j];                    if(j-1>=0) dp[i][j] += dp[i][j-1];                }            }        return dp[m-1][n-1];    }private :    int dp[SIZE][SIZE];};

组合数学的方法,高中数学题,其实正常来算也是O(n^2)使用

C(M-1,N-1)+C(M-1,N)=C(M,N)


也可以这样http://www.bubuko.com/infodetail-911131.html


0 0