/****************************
Name: Unique Paths II
Date: 02/01/2016
Author: Hualin Li
Description: This is the Unique Paths II in the C++. 还是DP大法
做题感想:这道题和走楼梯有着异曲同工之妙。解题的诀窍在于列出DP公式如下:
dp[i][j]=dp[i][j-1]+dp[i-1][j]。同时,要理解一点:如果该路径变成一维的,
无论是横看的一维还是竖着看的一维,都只有一种走法。
和I差别的是有个障碍物,多了几行程序。大家只要记住,在一维的情况下,dp(i)(0)
还有路走的两个条件是dp(i-1)(0)还有路走,且dp(i)(0)本身不是障碍。在列dp
方程的时候,记得加一句判断当前的dp(i)(j)是否是障碍,如果是,则此路不通,就要
归零,然后继续用dp方程。
PS:第一次在leetcode里面,差一点做到写code调试一气呵成。还是有点小开心。白天调用framework的
郁闷暂时忘记了一会儿。
*****************************/
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
//If the whole stuff is empty
if(obstacleGrid.empty()||obstacleGrid[0].empty())
return 0;
//To get the size of vector
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
int dp[m][n];
dp[0][0] = (obstacleGrid[0][0] == 0 ? 1 : 0);
//To initialize the 1-D cases
for(int i=1;i<m;i++)
dp[i][0]=(dp[i-1][0]==1 && obstacleGrid[i][0]==0)?1:0;
for(int j=1;j<n;j++)
dp[0][j]=(dp[0][j-1]==1 && obstacleGrid[0][j]==0)?1:0;
//The dp equation is from here
for(int k=1;k<m;k++)
{
for(int l=1;l<n;l++)
{
if(obstacleGrid[k][l]==1)
dp[k][l]=0;
else
dp[k][l]=dp[k-1][l]+dp[k][l-1];
}
}
return dp[m-1][n-1];
}
回到主页
回到目录