Unique Paths I & II
2014-03-16 14:57
295 查看
因为两个problem都是关于Unique Paths,所以这一周都做了来个两连发:)
(1) Unique Paths I
一开始下意识就想到用递归,然后唰唰唰三行代码就写完了,想不到在线judge的时候报time exceed的错误,应该是当输入规模达到一定程度是递归栈上的开销太大了。然后百度搜到了其他人的数组实现[1],一下子有头绪了然后再唰唰唰写出了accepted的版本了。原理非常简单,就是用二维数组对应题目的mXn grid,然后每一个元素记录当前位置到终点的可达路线数。时间规模是O(mn)。
(2) Unique Paths II
这个是上一个的进阶版吧,额外添加了障碍obstacle,并且程序的接口要求对二维的vector进行处理。解题思路也很简单,只是比上一个多考虑点东西就行了。先对末行和末列进行初始化,然后在obstacle点赋值为0(此点不能走所以此点都终点的可达线路数为0),剩下的就是可和(1)同样的处理了。另外注意的是二维vector的操作(vector[][], at())和对特殊情况的处理(有一维长度是1和终点是obstacle)。
参考:
[1] http://blog.csdn.net/jellyyin/article/details/8682765
(1) Unique Paths I
class Solution { public: int uniquePaths(int m, int n) { if(m==1||n==1) return 1; int a[m] ; for(int i=0;i<m;i++) a[i][n-1]=1; for(int i=0;i<n;i++) a[m-1][i]=1; for(int i=n-2; i>=0; i--) for(int j=m-2;j>=0;j--) a[j][i]=a[j+1][i]+a[j][i+1]; return a[0][0]; } };
一开始下意识就想到用递归,然后唰唰唰三行代码就写完了,想不到在线judge的时候报time exceed的错误,应该是当输入规模达到一定程度是递归栈上的开销太大了。然后百度搜到了其他人的数组实现[1],一下子有头绪了然后再唰唰唰写出了accepted的版本了。原理非常简单,就是用二维数组对应题目的mXn grid,然后每一个元素记录当前位置到终点的可达路线数。时间规模是O(mn)。
(2) Unique Paths II
class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { int m=obstacleGrid.size(),n=obstacleGrid.at(0).size(); int i,j; if(m==1||n==1) { for(i=0;i<m;i++) for(j=0;j<n;j++) if(obstacleGrid[i][j]==1) return 0; return 1; } if(obstacleGrid[m-1][n-1]==1) return 0; for (i=m-1;i>=0;i--) if(obstacleGrid[i][n-1]==0) obstacleGrid[i][n-1]=1; else { obstacleGrid[i][n-1]=0; break; } for(;i>=0;i--) obstacleGrid[i][n-1]=0; for(j=n-2;j>=0;j--) if(obstacleGrid[m-1][j]==0) obstacleGrid[m-1][j]=1; else { obstacleGrid[m-1][j]=0; break; } for(;j>=0;j--) obstacleGrid[m-1][j]=0; for(j=n-2; j>=0; j--) for(i=m-2;i>=0;i--) { if(obstacleGrid[i][j]==1) obstacleGrid[i][j]=0; else obstacleGrid[i][j]=obstacleGrid[i+1][j]+obstacleGrid[i][j+1]; } return obstacleGrid[0][0]; } };
这个是上一个的进阶版吧,额外添加了障碍obstacle,并且程序的接口要求对二维的vector进行处理。解题思路也很简单,只是比上一个多考虑点东西就行了。先对末行和末列进行初始化,然后在obstacle点赋值为0(此点不能走所以此点都终点的可达线路数为0),剩下的就是可和(1)同样的处理了。另外注意的是二维vector的操作(vector[][], at())和对特殊情况的处理(有一维长度是1和终点是obstacle)。
参考:
[1] http://blog.csdn.net/jellyyin/article/details/8682765
相关文章推荐
- Unique Paths &&Unique Paths II
- Leetcode | Unique Paths I & II
- 62. Unique Paths && 63 Unique Paths II
- 【leetcode】Unique Paths I & II
- Unique Paths & Unique Paths II
- LeetCode | Unique Paths & II & Minimum Path Sum
- Unique Paths & Unique Paths II
- 62 & 63. Unique Paths I & II
- leetcode--Unique Paths && Unique Paths ii
- LeetCode: Unique Paths I & II & Minimum Path Sum
- Leetcode-Unique Paths&Unique PathsII
- [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
- leetcode--Unique Paths && Unique Paths ii
- Unique Paths I&&II
- leetcode-62&63 Unique Paths I & II
- Unique Paths & Unique Paths II
- LeetCode之“动态规划”:Minimum Path Sum && Unique Paths && Unique Paths II
- 【LeetCode】Unique Paths I && II
- LeetCode 62 Unique Paths & 63 Unique Paths II
- 【LeetCode】Unique Paths I && II && Minimum Path Sum