您的位置:首页 > 产品设计 > UI/UE

【leetcode】Unique Paths I & II

2015-04-20 17:29 459 查看
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,利用杨辉三角即可。

class Solution {
public:

int uniquePaths(int m, int n) {
vector<vector<int>>f(m,vector<int>(n));

for(int i=0;i<n;i++)
f[0][i]=1;
for(int i=0;i<m;i++)
f[i][0]=1;
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
f[i][j]=f[i-1][j]+f[i][j-1];

return f[m-1][n-1];
}
};


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.

class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int row=obstacleGrid.size();
int col=obstacleGrid[0].size();

int *dp=new int[col];

if(obstacleGrid[0][0]!=0)
dp[0]=0;
else
dp[0]=1;

for(int i=1;i<col;i++)
if(obstacleGrid[0][i]!=0)
dp[i]=0;
else
dp[i]=dp[i-1];

for(int i=1;i<row;i++)
for(int j=0;j<col;j++)
if(obstacleGrid[i][j]!=0)
dp[j]=0;
else if(j>0)
dp[j]=dp[j]+dp[j-1];

return dp[col-1];

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: