算法随想录第三十九天打卡|62.不同路径 , 63. 不同路径 II

这篇具有很好参考价值的文章主要介绍了算法随想录第三十九天打卡|62.不同路径 , 63. 不同路径 II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

62.不同路径 

本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 

代码随想录

视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili

class Solution(object):
    def uniquePaths(self, m, n):
        if m==1 and n==1:
            return 1
        dp=[[0]*n]*m
        dp[0][0]=1
        for x in range(m):
            for y in range(n):
                if x>0 and y>0:
                    dp[x][y]=dp[x-1][y]+dp[x][y-1]
                if x==0 or y==0:
                    dp[x][y]=1
        return dp[m-1][n-1]

总结

把m和n弄反了。

 63. 不同路径 II 

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

视频讲解:动态规划,这次遇到障碍了| LeetCode:63. 不同路径 II_哔哩哔哩_bilibili

思路

我本来想的是用高中的遇到障碍的题来解的,结果他没说有几个障碍,这个方法只能解决一个障碍的,就是减去经过这个障碍的路径。

我写的错误方法

class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        m=0
        n=0
        x=len(obstacleGrid)
        y=len(obstacleGrid[0])
        if x==1 and y==1:
            if obstacleGrid[0][0]==1:
                return 0
            return 1
        for i in range(x):
            for j in range(y):
                if obstacleGrid[i][j]==1:  #表示遇到障碍
                    if i==x-1 and j==y-1:
                        return 0 
                    m=i
                    n=j #表示障碍的坐标
                if i>0 and j>0:
                    obstacleGrid[i][j]=obstacleGrid[i-1][j]+obstacleGrid[i][j-1]
                elif (i==0 or j==0) and (i>0 or j>0):
                    obstacleGrid[i][j]=1
        pre=obstacleGrid[m][n]*obstacleGrid[x-m-1][y-n-1]
        return obstacleGrid[x-1][y-1]-pre

答案

class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        if obstacleGrid[m - 1][n - 1] == 1 or obstacleGrid[0][0] == 1:
            return 0
        dp = [[0] * n for _ in range(m)]
        for i in range(m):
            if obstacleGrid[i][0] == 0:  # 遇到障碍物时,直接退出循环,后面默认都是0
                dp[i][0] = 1
            else:
                break
        for j in range(n):
            if obstacleGrid[0][j] == 0:
                dp[0][j] = 1
            else:
                break
        for i in range(1, m):
            for j in range(1, n):
                if obstacleGrid[i][j] == 1:
                    continue
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
        return dp[m - 1][n - 1]

总结

我应该从他的定义出发的,dp[i][j]的定义就是从开始坐标到当前坐标的路径的数量,所以我直接为0就表是有障碍了呀。文章来源地址https://www.toymoban.com/news/detail-808366.html

到了这里,关于算法随想录第三十九天打卡|62.不同路径 , 63. 不同路径 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【代码随想录打卡】快慢指针

    力扣链接: 力扣 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    2024年02月12日
    浏览(29)
  • 代码随想录打卡第35天

    2024年02月12日
    浏览(23)
  • 代码随想录打卡第34天

    2024年02月11日
    浏览(77)
  • 【代码随想录 | Leetcode | 第九天】哈希表 | 快乐数 | 四数相加 II | 赎金信

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来哈希法~快乐数 | 四数相加 II | 赎金信的分享 ✨ ✨题目链接点这里 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后

    2024年02月13日
    浏览(38)
  • 代码随想录Day_48打卡

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你  不触

    2024年02月11日
    浏览(26)
  • 代码随想录Day_52打卡

    给你一个整数数组  nums  ,找到其中最长严格递增子序列的长度。 子序列  是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, [3,6,2,7]  是数组  [0,3,1,6,2,2,7]  的子序列。 事例: 思路:        使用动态规划,dp含义:dp[i]表示数

    2024年02月10日
    浏览(28)
  • 代码随想录补打卡 56 合并区间

    56 合并区间  代码如下 func merge(intervals [][]int) [][]int {         sort.Slice(intervals,func(i,j int)bool{  //将数组按左边界的大小排序         return intervals[i][0]intervals[j][0]     })     res := make([][]int,0) //定义一个目标数组     res = append(res,intervals[0])  //先将数组的第

    2024年02月02日
    浏览(30)
  • 代码随想录第39天 | 62.不同路径 、 63. 不同路径 II

    一、前言 参考文献:代码随想录 今天主要的题目是动态规划的路径问题,动态规划五要点; 1、确定dp数组,dp[i]代表什么i代表什么; 2、递推公式; 3、初始化dp数组; 4、遍历顺序; 5、打印dp数组; 二、不同路径 1、思路: 我感觉动态规划,我听的很认真,然后这个题目,

    2024年04月13日
    浏览(30)
  • 随想录Day39--动态规划: 62.不同路径 , 63. 不同路径 II

    今天的路劲问题,思想和昨天的爬楼梯一样,主要还是找到你这个位置是怎么来的,到达dp[i][j]的方法由到达dp[i - 1][j]的方法再加上到达dp[i][j - 1]的方法和。在初始化时,当i=0或者j=0时,到达他们的只有一条路劲,就是直走,所以对它进行初始化。 63. 不同路径 II 加了一个障

    2024年02月03日
    浏览(46)
  • 代码随想录打卡—day41—【DP】— 8.26+27 DP基础3

    343. 整数拆分 一开始做 没有思路,学习了题解才,ac代码: 后来仔细看题解,其实 for - j 的次数可以优化—— 注意 枚举j的时候,是从1开始的。从0开始的话,那么让拆分一个数拆个0,求最大乘积就没有意义了。 优化1: j 的结束条件是 j i - 1 ,其实 j i 也是可以的,不过

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包