【问题标题】:Minimum steps to one Python一个 Python 的最少步骤
【发布时间】:2016-02-02 11:58:05
【问题描述】:

我已经尝试过这段代码,但它不起作用,结果为 0。我知道递归代码,但我正在尝试使用 for 循环。

def minsteps(n):
    memo =[0]*(n+1)
    memo[0] = 0
    memo[1] = 0
    for i in range(2,n,1):
        r = 1+memo[i-1]
        if i%2 == 0:
            r = min(r, 1+memo[i//2])
        elif i%3 == 0:
            r = min(r, 1+memo[i//3])
        memo[i] = r
    return memo[n]

此代码是为了提供一个最小步数,要求某个数为 1,经历负 1、除 2 和除 3 的过程。 例如: 6->2->1 [3] 要么 6->3->1 [3] 要么 6->5->4->2->4 [5]

因此,最小步数为 3。

【问题讨论】:

  • 您能解释一下您的代码应该做什么。提供样本输入和预期输出。如果您提供有关您认为问题所在的任何见解,这也会有所帮助。值得您花时间阅读this
  • 我不确定你的函数是做什么的(或应该做什么),但可以肯定的是,由于range(2,n,1),你将项目修改为n-1(这是范围的最后一个元素),而你最后拿memo[n]。 IE。使用range(2, n+1)?
  • 您的脚本中还缺少的一件事是print() 命令,编写中间信息。

标签: python for-loop minimum


【解决方案1】:

您的代码包含“一个错误”。您的循环由range(2,n,1) 控制,即从2n-1 的数字,包括在内,因此您初始化列表值memo[2]memo[n-1],包括在内。但是你从memo[n] 返回你的结果,它仍然有它的初始0 值。

您可以使用此for 语句修复该错误:

 for i in range(2,n+1,1):

或者,这是另一种解决方案:

import collections

def minsteps(n):
    memo = collections.defaultdict(lambda: n+1)
    memo[1] = 0
    for i in range(1, n+1):
        memo[i+1] = min(memo[i+1], memo[i]+1)
        memo[i*2] = min(memo[i*2], memo[i]+1)
        memo[i*3] = min(memo[i*3], memo[i]+1)
    return memo[n]

for i in range(10):
    print i, minsteps(i)

【讨论】:

    【解决方案2】:

    试试这个。

    def minsteps1(n):
        memo = [0]*(n+1)
        def loop(n):
            if n>1:
                if memo[n]!=0:
                    return memo[n]
                else:
                    memo[n] = 1 + loop(n-1)
                    if n%2 == 0:
                        memo[n] = min(memo[n], 1+loop(n//2))
                    if n%3 == 0:
                        memo[n] = min(memo[n], 1+loop(n//3))
                    return memo[n]
            else:
                return 0
        return loop(n)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多