[C++]LeetCode: 78 Unique Paths 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.

思路:这道题和LeetCode:
56 Unique Paths
非常相似,只是这次首先要先判断是否有障碍。不是每次都有两个选择(向右,向下)。因为有了这个,我们不能直接求和得到结果。递推式和unique path一样,不过我们每次都要先判断是否有障碍,如果有,dp[i][j] = 0,如果没有dp[i][j] = dp[i-1][j] + dp[i][j-1]. 所以,实际上我们还是只需要一个一维数组,因为更新时的信息足够了。

Attention:

1. 注意和unique path的区别,首先是一维数组的初始化,由于我们还需要判断第一行是否存在障碍,所以初始化时为0.

<span style="font-size:14px;">vector<int> dp(col, 0);</span>

2. 由于我们还需要计算第一行的dp值,所以循环范围从0~row, 0~col.注意计算递归式时,dp[ci] = dp[ci] + dp[ci-1],要先判断ci>0.

<span style="font-size:14px;">for(int ri = 0; ri < row; ri++)
        {
            for(int ci = 0; ci < col; ci++)
            {</span>

3. 我们需要初始化dp[0], 如果obstacleGrid[0][0] = 1, 则会重置dp[0] 为0, 否则dp[0]= 1,将用于更新下一个动态规划表的值。

<span style="font-size:14px;">if(obstacleGrid[ri][ci] == 1)
{
   dp[ci] = 0;
}
else
{
   if(ci > 0)
   dp[ci] = dp[ci] + dp[ci-1];
}</span>

复杂度:时间复杂度,一次遍历O(n), 空间复杂度,一维数组,O(N)

AC Code:

<span style="font-size:14px;">class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
        int row = obstacleGrid.size();
        int col = obstacleGrid[0].size();
        if(row == 0 || col == 0) return 0;

        vector<int> dp(col, 0);
        dp[0] = 1;

        for(int ri = 0; ri < row; ri++)
        {
            for(int ci = 0; ci < col; ci++)
            {
                if(obstacleGrid[ri][ci] == 1)
                {
                    dp[ci] = 0;
                }
                else
                {
                    if(ci > 0)
                        dp[ci] = dp[ci] + dp[ci-1];
                }
            }
        }

        return dp.back();
    }
};</span>
时间: 2024-10-10 21:35:43

[C++]LeetCode: 78 Unique Paths II的相关文章

LeetCode --- 63. Unique Paths II

题目链接:Unique Paths 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

【Leetcode】Unique Paths 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 middl

[LeetCode][JavaScript]Unique Paths II

Unique Paths 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 obsta

【LeetCode】Unique Paths 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

Leetcode 动态规划 Unique Paths II

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Unique Paths II Total Accepted: 13655 Total Submissions: 49081My Submissions Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would t

leetCode 63.Unique Paths II (唯一路径II) 解题思路和方法

Unique Paths 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 obsta

[LeetCode]20. Unique Paths 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 middl

Java for LeetCode 063 Unique Paths 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 middl

leetcode No63. Unique Paths II

Question: 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