Leetcode:62. Unique Paths

Description

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?

思路

  • 明显的动态规划嘛,用一个二维数组记录状态,dp[i][j]表示从(0,0)到(i,j)的路径数
  • dp[i][j] = dp[i][j-1] + dp[i-1][j]
  • 可以把二维数组降到一维

代码

  • 二维数组
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> flag(m + 1, vector<int>(n + 1, 0));
       
        for(int i = 1; i <= m; ++i)
            flag[i][1] = 1;
        for(int j = 1; j <= n; ++j)
            flag[1][j] = 1;
            
        for(int i = 2; i <= m; ++i){
            for(int j = 2; j <= n; ++j)
                flag[i][j] = flag[i][j - 1] + flag[i - 1][j];
        }
        
        return flag[m][n];
    }
};
  • 一维数组
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<int> flag(n + 1, 0);
       
        for(int i = 1; i <= n; ++i)
            flag[i] = 1;
        
        int before = 1;
        for(int i = 2; i <= m; ++i){
            before = 1;
            for(int j = 2; j <= n; ++j){
                flag[j] = flag[j] + before;
                before = flag[j];
            }
        }
        
        return flag[n];
    }
};
posted @ 2017-05-23 20:07  JeffLai  阅读(106)  评论(0编辑  收藏  举报