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.

解题:从左上角走到右下角,每次只能向下或者向右走一步,不管怎么走都需要m+n-2步才能走到,而这其中有m-1步是向下走,有n-1是向右走,只用从这m+n-2个位置中选择m-1个位置,则剩余的位置表示向右走。容易求得值是Cm-1m+n-2,利用杨辉三角即可。

 1 class Solution {
 2 public:
 3 
 4     int uniquePaths(int m, int n) {
 5         vector<vector<int>>f(m,vector<int>(n));
 6 
 7         for(int i=0;i<n;i++)
 8             f[0][i]=1;
 9         for(int i=0;i<m;i++)
10             f[i][0]=1;
11         for(int i=1;i<m;i++)
12             for(int j=1;j<n;j++)
13                 f[i][j]=f[i-1][j]+f[i][j-1];
14 
15         return f[m-1][n-1];
16     }
17 };

 

 

II:

Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
[0,0,0],
[0,1,0],
[0,0,0]
]
The total number of unique paths is 2.

Note: m and n will be at most 100.

 

 1 class Solution {
 2 public:
 3     int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
 4         int row=obstacleGrid.size();
 5         int col=obstacleGrid[0].size();
 6 
 7         int *dp=new int[col];
 8 
 9         if(obstacleGrid[0][0]!=0)
10             dp[0]=0;
11         else
12             dp[0]=1;
13 
14         for(int i=1;i<col;i++)
15             if(obstacleGrid[0][i]!=0)
16                 dp[i]=0;
17             else
18                 dp[i]=dp[i-1];
19 
20         for(int i=1;i<row;i++)
21             for(int j=0;j<col;j++)
22                 if(obstacleGrid[i][j]!=0)
23                     dp[j]=0;
24                 else if(j>0)
25                     dp[j]=dp[j]+dp[j-1];
26 
27         return dp[col-1];
28 
29 
30     }
31 };

 

posted on 2015-04-20 17:29  黄瓜小肥皂  阅读(154)  评论(0编辑  收藏  举报