Unique Paths II -- LeetCode

原题链接:  http://oj.leetcode.com/problems/unique-paths-ii/  
这道题跟 Unique Paths 非常类似,只是这道题给机器人加了障碍,不是每次都有两个选择(向右,向下)了。因为有了这个条件,所以 Unique Paths 中最后一个直接求组合的方法就不适用了,这里最好的解法就是用动态规划了。递推式还是跟 Unique Paths 一样,只是每次我们要判断一下是不是障碍,如果是,则res[i][j]=0,否则还是res[i][j]=res[i-1][j]+res[i][j-1]。实现中还是只需要一个一维数组,因为更新的时候所需要的信息足够了。这样空间复杂度是是O(n)(如同 Unique Paths 中分析的,如果要更加严谨,我们可以去行和列中小的那个,然后把小的放在内层循环,空间复杂度就是O(min(m,n)),时间复杂度还是O(m*n)。代码如下:
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    if(obstacleGrid == null || obstacleGrid.length==0 || obstacleGrid[0].length==0)
        return 0;
    int[] res = new int[obstacleGrid[0].length];
    res[0] = 1;
    for(int i=0;i<obstacleGrid.length;i++)
    {
        for(int j=0;j<obstacleGrid[0].length;j++)
        {
            if(obstacleGrid[i][j]==1)
            {
                res[j]=0;
            }
            else
            {
                if(j>0)
                    res[j] += res[j-1];
            }
        }
    }
    return res[obstacleGrid[0].length-1];
}
这里就不列出brute force递归方法的代码了,递归式和结束条件跟动态规划很近似,有兴趣的朋友可以写一下哈。
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值