【问题标题】:Recusive fxn not returning what's expected递归 txn 没有返回预期的结果
【发布时间】:2021-01-03 17:38:28
【问题描述】:

所以我正在研究一个hackerrank 简单的问题。这实际上很容易,但我发现了一些我确信它很小但我找不到的东西,我希望你们能帮助查明问题。

问题的名称是“Jumping on The Clouds”,转述摘要如下:

“玩家可以跳上任何具有数字的积云 等于当前云数加1或2

。玩家必须避开雷雨云。确定最小数量 从起始位置跳到最后位置所需的跳跃次数 云。赢得比赛总是有可能的。

对于每场比赛,您将获得一组编号为 0 的云,如果它们是 安全或 1(如果必须避免)。 "

为简化起见,您将得到一个由 0 和 1 组成的数组,并且您必须找到到达数组末尾所需的最少跳转次数。您一次只能跳 1 或 2 个点,并保证最后一朵云是“安全的”。

我立即看到这可以通过两种方式解决,1. 作为图论问题,2. 作为树实现。

我选择使用树实现。

这是我的代码:

def jumpingOnClouds(c):
    if len(c) <= 1:
        print("at end of string")
        return 0
    
    elif c[0] == 1:
        print("dead end")
        return -1
    
    else:
        one = jumpingOnClouds(c[1:])    
        two = jumpingOnClouds(c[2:])
        if one == -1 and two > 0:
            print("chose 2")
            return two + 1
        elif two == -1 and one > 0:
            print("chose 1")
            return one + 1
        else:
            print("both were viable")
            return min(one, two) + 1

简单吧?

除非它没有正确返回。

我尝试的是: 1:我将字符串末尾的返回值从“1”更改为“0”,就像现在一样。这是因为当我将它设置为 1 时,它总是返回 1 太高的数字。因此,如果最小值为 3,它将返回 4,等等。

2:当我在字符串末尾返回 0 时,它有时会保持原样并返回 0。

这方面的一个例子是输入 [0,0,1,0,0,1,0],它返回 0 与我当前的代码。

很抱歉发了这么长的帖子,但我试图遵守社区的规则,而不是激怒任何人。感谢您的帮助!

输入和输出示例:

[000010] -> 3
[0010010] -> 4
[000100] -> 3
[0100010] -> 3

【问题讨论】:

  • 请使用示例输入和您需要的输出更新您的问题。
  • 确定没问题
  • 顺便说一句,请不要将您的问题更改为正确的,否则没有人能够弄清楚什么是错误的以及必须更改什么才能得到正确的答案。

标签: python arrays python-3.x tree


【解决方案1】:

好的,这是对 onetwo 的测试:

def jumpingOnClouds(c):
    if len(c) <= 1:
        #print("at end of string")
        return 0
    
    elif c[0] == 1:
        #print("dead end")
        return -1
    
    else:
        one = jumpingOnClouds(c[1:])    
        two = jumpingOnClouds(c[2:])
        if one == -1 and two >= 0:
            #print("chose 2")
            return two + 1
        elif two == -1 and one >= 0:
            #print("chose 1")
            return one + 1
        else:
            #print("both were viable")
            return min(one, two) + 1

for game in [[0,0,0,0,1,0],[0,0,1,0,0,1,0],[0,0,0,1,0,0],[0,1,0,0,0,1,0]]:
    print(f'{game} -> {jumpingOnClouds(game)}')

给定的输出

【讨论】:

  • 感谢先生如此迅速的回复。关注细节在这个领域很重要吧?
  • 没错。一次注意力不集中和繁荣,一切都在你身上炸毁。顺便说一句,单元测试在这方面有很大帮助。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 2016-06-28
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2015-09-16
相关资源
最近更新 更多