【问题标题】:cant store the value in global variable无法将值存储在全局变量中
【发布时间】:2021-06-28 11:10:41
【问题描述】:

我试图用回溯算法在 leetcode 中做排列问题,在打印时我得到了所有的可能性,但是当我试图将这些值存储在全局变量中时,我不允许这样做

Ex:
AnswerIwant:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

when i print those value while recursion it is print 
Example:
[1, 2, 3]
[1, 3, 2]
[2, 3, 1]
[2, 1, 3]
[3, 1, 2]
[3, 2, 1]

当我将值存储在 outPut 的全局变量中时,我得到了这样的结果

[1, 2, 3]
[[1, 2, 3]]
[[1, 2]]
[1, 3, 2]
[[1, 3, 2], [1, 3, 2]]
[[1, 3], [1, 3]]
[[1], [1]]
[2, 3, 1]
[[2, 3, 1], [2, 3, 1], [2, 3, 1]]
[[2, 3], [2, 3], [2, 3]]
[2, 1, 3]
[[2, 1, 3], [2, 1, 3], [2, 1, 3], [2, 1, 3]]
[[2, 1], [2, 1], [2, 1], [2, 1]]
[[2], [2], [2], [2]]
[3, 1, 2]
[[3, 1, 2], [3, 1, 2], [3, 1, 2], [3, 1, 2], [3, 1, 2]]
[[3, 1], [3, 1], [3, 1], [3, 1], [3, 1]]
[3, 2, 1]
[[3, 2, 1], [3, 2, 1], [3, 2, 1], [3, 2, 1], [3, 2, 1], [3, 2, 1]]
[[3, 2], [3, 2], [3, 2], [3, 2], [3, 2], [3, 2]]
[[3], [3], [3], [3], [3], [3]]

[[], [], [], [], [], []]

这是我上面输出的代码

nums = [1,2,3]
val=nums
answerIwant = []
numberOfValues=len(val)-1
answer=[]
def permutation(nums, bucket, index,sub):
    global answerIwant,numberOfValues
    for i in range(len(nums)):
        val=nums.pop(0)
        bucket.append(val)
        if len(bucket)-1==numberOfValues:
            print(bucket)
            answerIwant.append(bucket)
        permutation(nums, bucket, index,sub)
        nev=bucket.pop()
        nums.append(nev)
    print(answerIwant)
#[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
sub=[]
bucket = []

val=(permutation(nums, bucket, index,sub))
print(val)

用符号词解释我面临的问题 谢谢

【问题讨论】:

  • 这是您要找的吗? stackoverflow.com/questions/104420/…
  • 我已经用另一种方法解决了,我正在尝试用 backtrackg 来解决这个问题,以便学习回溯我得到了所有的可能性,但问题是我无法在全局变量中存储这些值我不知道关于为什么它不起作用

标签: python algorithm recursive-backtracking


【解决方案1】:

在 answerIwant 列表中追加时,您必须追加列表的副本。所以你应该把answerIwant.append(bucket)换成answerIwant.append(bucket.copy())

请参阅this 了解更多信息。所以你的代码可能是这样的,

nums = [1,2,3]
val=nums
answerIwant = []
numberOfValues=len(val)-1
answer=[]
def permutation(nums, bucket, index,sub):
    global numberOfValues
    for i in range(len(nums)):
        val=nums.pop(0)
        bucket.append(val)
        if len(bucket)-1==numberOfValues:
            # print(bucket)
            answerIwant.append(bucket.copy())
        permutation(nums, bucket, index,sub)
        nev = bucket
        nev=bucket.pop()
        nums.append(nev)

#[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
sub=[]
bucket = []

permutation(nums, bucket, 0,sub)

print(answerIwant)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多