美文网首页
LeetCode-Unique Paths

LeetCode-Unique Paths

作者: 圣地亚哥_SVIP | 来源:发表于2018-10-12 16:07 被阅读0次

题目要求:

  • 二维矩阵,从左上角到右下角共有多少条路
  • 只能向前或向下

解法:

  • 回溯(超时,不能AC)
  • Dp: f[i][j] = f[i-1][j] + f[i][j-1]

源码如下:

class Solution {
public:
    /*
    * 1. 回溯解法
    * 2. 非递归解法
    */
    
    //非递归解法
    void non_uniqpath(int m,int n,int& num){
        
        vector<vector<int>> flag;
        flag.resize(m);
        for_each(flag.begin(),flag.end(),[n](vector<int>& pa){pa.resize(n,0);});
        for (int i=0;i<n;i++){
            flag[0][i] = 1;
        }
        for (int i=0;i<m;i++){
            flag[i][0] = 1;
        }
        for (int i=1;i<m;i++){
            for (int j=1;j<n;++j){
                flag[i][j] = flag[i-1][j]+flag[i][j-1];
            }
        }
        num = flag[m-1][n-1];
    }
    
    
    
    //递归解法
    void rec_uniqpath(int m,int n,int row,int col,int& num){
        if (row==m-1 && col==n-1){
            num++;
            return;
        }
        if (col < n-1)
        rec_uniqpath(m,n,row,col+1,num);
        if (row < m-1)
        rec_uniqpath(m,n,row+1,col,num);
    }
    
    int uniquePaths(int m, int n) {
        int num{0};
        //rec_uniqpath(m,n,0,0,num);
        non_uniqpath(m,n,num);
        return num;
    }
};

相关文章

网友评论

      本文标题:LeetCode-Unique Paths

      本文链接:https://www.haomeiwen.com/subject/zesgaftx.html