查看: 3375| 回复: 23
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 为什么会有跟答案一模一样的code就是输出结果不一样

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
遇到两次这种情况了,第一遍自己做不出来,于是找到一个看得懂的算法,差不多默写下来,有不对的地方,一点点 照着答案改,改的都一模一样了,还是输出不一样,放到IDE里一行一行输出看中间结果,跟应该输出不一样,而且莫名其妙的不知道为什么输出的是这样的,实在找不出哪里有问题。
有遇到相同状态的同学吗?你们是怎样克服的

上一篇:新人刚转cs有题目,求赐教
下一篇:[分享]LeetCode详细题解

本帖被以下淘专辑推荐:

  • · DS|主题: 224, 订阅: 39
  • · JOB|主题: 269, 订阅: 12
推荐
zqyzdsjdy 2019-5-21 07:23:58 | 只看该作者
全局:
我刚开始刷题也这样。。就很气,但是其实仔细一行行看看你会发现肯定是有问题的,一般是笔误或者是由于理解有问题把很简单的一步中的变量写成了别的,这个时候就得好好反思下了。实在不相信,把别人pass的代码copy上一行行纠错
回复

使用道具 举报

推荐
mozz 2019-5-25 11:20:14 | 只看该作者
全局:
直接用https://www.diffchecker.com/查一下不同即可
回复

使用道具 举报

推荐
 楼主| 林红玉 2019-5-21 10:32:11 | 只看该作者
全局:
一剑终情 发表于 2019-5-21 05:39
已经定位到输出哪里不一样了,继续debug就好了。

如果实在要问,得发代码

谢谢T^T leetcode 64
我的代码:
def minPathSum(grid):

    n = len(grid)
    m = len(grid[0])

    dp = [[0 for x in range(m)] for x in range(n)]
    dp[0][0] = grid[0][0]
    #print("dp[0][0] is " + str(dp[0][0]))
    for i in range(1, n):
        dp[i][0] = dp[i - 1][0] + grid[i][0]
    # print("when i equal " + str(i))
    # print("dp[i - 1][0] is " + str(dp[i - 1][0]))
    # print("grid[i][0] is " + str(grid[i][0]))
    # print("dp[i][0] is " + str(dp[i][0]))

    for j in range(1, m):
        dp[0][j] = dp[0][j - 1] + grid[0][j]
    # print("when j equal " + str(j))
    # print("dp[0][j-1] is " + str(dp[0][j-1]))
    # print("grid[0][j] is " + str(grid[0][j]))
    # print("dp[0][j] is " + str(dp[0][j]))
    # print(dp)
    for i in range(1, n):
        for j in range(1, m):
            dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
   
    return dp[-1][-1]
grid = [[1,3,1],[1,5,1],[4,2,1]]

print(minPathSum(grid))

答案代码;
def minPathSum(grid):
    n = len(grid)
    m = len(grid[0])
    dp = [[0 for x in range(m)] for x in range(n)]

    dp[0][0] = grid[0][0]

    for i in range(1, m):
        dp[0][i] = dp[0][i - 1] + grid[0][i]
        # print("when i equal " + str(i))
        # print("dp[0][i - 1] is " + str(dp[0][i - 1]))
        # print("grid[0][i] is " + str(grid[0][i]))
        # print("dp[0][i] is " + str(dp[0][i]))
    for i in range(1, n):
        dp[i][0] = dp[i - 1][0] + grid[i][0]
        # print("when i equal " + str(i))
        # print("dp[i - 1][0] is " + str(dp[i - 1][0]))
        # print("grid[i][0] is " + str(grid[i][0]))
        # print("dp[i][0] is " + str(dp[i][0]))
    for i in range(1, n):
        for j in range(1, m):
            dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]

    return dp[-1][-1]
print(minPathSum([[1,3,1],[1,5,1],[4,2,1]]))
实在找不到错误在哪里了,正确的结果是7
回复

使用道具 举报

全局:
已经定位到输出哪里不一样了,继续debug就好了。

如果实在要问,得发代码
回复

使用道具 举报

🔗
currant 2019-5-21 07:02:31 | 只看该作者
全局:
建议先diff 一下两个源代码
回复

使用道具 举报

全局:
for或者if那行最后加分号了?
回复

使用道具 举报

🔗
 楼主| 林红玉 2019-5-21 10:23:27 | 只看该作者
全局:
currant 发表于 2019-5-21 07:02
建议先diff 一下两个源代码

谢谢!!我以为leetcode只能diff结果,刚查了一下发现有其他diff code的工具,虽然还不知道怎么用,但是太好,看上去会很有用!!
回复

使用道具 举报

🔗
 楼主| 林红玉 2019-5-21 10:24:15 | 只看该作者
全局:
微信用户_0x045 发表于 2019-5-21 08:14
for或者if那行最后加分号了?

😄😄
回复

使用道具 举报

🔗
qich 2019-5-21 10:50:29 | 只看该作者
全局:
林红玉 发表于 2019-5-21 10:32
谢谢T^T leetcode 64
我的代码:
def minPathSum(grid):

先不说这代码哪里出了bug,这里居然能跑吗?
dp[0] = dp[0][i - 1] + grid[0]

是我的电脑和我的脑子同时出了问题吗……
回复

使用道具 举报

🔗
qich 2019-5-21 10:59:06 | 只看该作者
全局:
如果说原来的code是这样的:
  1. def minPathSum(grid):
  2.     n = len(grid)
  3.     m = len(grid[0])
  4.     dp = [[0 for x in range(m)] for x in range(n)]

  5.     dp[0][0] = grid[0][0]

  6.     for i in range(1, m):
  7.         dp[0][i] = dp[0][i - 1] + grid[0][i]
  8.         # print("when i equal " + str(i))
  9.         # print("dp[0][i - 1] is " + str(dp[0][i - 1]))
  10.         # print("grid[0] is " + str(grid[0]))
  11.         # print("dp[0] is " + str(dp[0]))
  12.     for i in range(1, n):
  13.         dp[i][0] = dp[i - 1][0] + grid[i][0]
  14.         # print("when i equal " + str(i))
  15.         # print("dp[i - 1][0] is " + str(dp[i - 1][0]))
  16.         # print("grid[0] is " + str(grid[0]))
  17.         # print("dp[0] is " + str(dp[0]))
  18.     for i in range(1, n):
  19.         for j in range(1, m):
  20.             dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]

  21.     return dp[-1][-1]
复制代码


那估计是你自己初始化的时候,交换了行和列的顺序,但是初始化的for语句里没有写对?
  1. dp[0][i] = dp[0][i - 1] + grid[0][i]#第一行
  2. dp[i][0] = dp[i - 1][0] + grid[i][0]#第一列
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表