zoukankan      html  css  js  c++  java
  • [LeetCode] Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

    The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

    How many possible unique paths are there?

    Above is a 3 x 7 grid. How many possible unique paths are there?

    Note: m and n will be at most 100.

    以下方法,用stack可以遍历每条路径,结果正确,但是Time Limit Exceeded!因为只要得到路径的个数所以并不需要遍历每条路径!思考简单的方法.

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int row=0,col=0,res=0;
            pair<int,int> rowCol;
            rowCol = make_pair(row,col);
            stack<pair<int,int>> stackRowCol;
            stackRowCol.push(rowCol);
            while(!stackRowCol.empty()){
               pair<int,int> temp = stackRowCol.top();
               stackRowCol.pop();
               row = temp.first;
               col = temp.second;
               if(row==m-1 && col==n-1){
                  res++;
                  continue;}
               if(row<m-1)
               {
                   rowCol = make_pair(row+1,col);
                   stackRowCol.push(rowCol);
               }
               if(col<n-1)
               {
                  rowCol = make_pair(row,col+1);
                  stackRowCol.push(rowCol);
               }   
            }//end while
            return res;
        }
    };

    用动态规划的方法(DP),定义一个m*n大小的矩阵,矩阵里的值表示从当前点到右下角的路径数,假如(i,j)点到终点的路径数是C(i,j),则

    C(i,j) = C(i+1,j)+C(i,j+1);由此可以用O(m*n)的时间复杂度和O(m*n)的空间复杂度计算出结果,具体编程如下:

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int row=m-2,col=n-2,res=0;
            vector<int> vec0(n,1);
            vector<vector<int> > vec(m,vec0);
            for(int i=row;i>=0;i--){
                for(int j=col;j>=0;j--){
                   vec[i][j]=vec[i][j+1]+vec[i+1][j];
                }
            }
                 
            return vec[0][0];
        }
    };
  • 相关阅读:
    Mybatis批处理
    Mybatis兼容C3P0连接池
    一对多,多对一查询
    缓存
    动态sql
    mybatis 日志记录
    python学习day07-encode和decode
    python学习day07---三级目录优化
    python学习day06练习---三级目录
    python学习day06--02字典增删差改以及字符串的一些方法
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3867440.html
Copyright © 2011-2022 走看看