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
1and
0respectively
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]; } };
相关文章推荐
- Linux学习笔记:用fdisk工具分区,swap分区的管理
- hadoop pid
- IOS--POST异步请求
- windows下关于使用eclipse开发web服务器后台项目完整配置(jsp+javabean+servlet)
- 利用python requests库模拟登陆知乎
- TCP/IP基础(三)
- Android Intent 传递List或者对象
- 网站建设的基本流程
- HDU 1042 N!(大数阶乘)
- Binutils工具集 解析
- [LeetCode]136. Single Number
- 面向对象之封装
- poj3159 Candies 2012-09-07
- jsp九大内置对象及其用法
- 获取AndroidManifest里的信息
- 图片循环滚动控件ScrollingImageView
- java web部分知识
- Linux下的read,write函数
- 复制jar包到eclipse报错
- 消息的消费顺序和次数JMS(三)