您的位置:首页 > 其它

leetcode63解题报告

2016-03-02 21:00 351 查看

问题描述

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?

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.

思路

这是一道动态规划的题目,递归方程是:
f(x,y)=f(x-1,y)+f(x,y-1),x>=1,y>=1
动态规划题目最重要的就是根据递归方程确定数据结构。这是一个二元递归方程,因此我们用二维数组来进行存储。

代码

class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
if(m==0||n==0||obstacleGrid[0][0]==1||obstacleGrid[m-1][n-1]==1)
return 0;
vector<vector<int> > path(m,vector<int>(n,1));
int i,j;
for(i=0;i<m;i++)
if(obstacleGrid[i][0]==1){
for(j=i;j<m;j++)
path[j][0]=0;
break;
}
for(j=0;j<n;j++)
if(obstacleGrid[0][j]==1){
for(i=j;i<n;i++)
path[0][i]=0;
break;
}
for(i=1;i<m;i++)
for(j=1;j<n;j++)
if(obstacleGrid[i][j]==1)
path[i][j]=0;
for(i=1;i<m;i++)
for(j=1;j<n;j++)
if(obstacleGrid[i][j]!=1){
path[i][j]=path[i-1][j]+path[i][j-1];
}
return path[m-1][n-1];

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