【问题标题】:Permute numbers using permute str logic使用 permute str 逻辑置换数字
【发布时间】:2022-08-17 21:29:20
【问题描述】:

作为尝试更好地回溯的一部分,我编写了以下代码来置换字符串:

def permute(str):
    permuteHelper(str,\"\")

def permuteHelper(str,chosen):
    if not str:
        print(chosen)
    else:
        for i in range(len(str)):
        #choose
            currChar = str[i] #The char we choose
            chosen += currChar #Add chosen char to chosen chars
            str = str[0 : i] + str[i + 1 :] #Remove char in i
        #explore
            permuteHelper(str,chosen) #Explore
        #unchoose
            str = str[:i] + currChar + str[i:] #Put currChar where it was
            chosen = chosen[:-1:] #Remove last char of chosen

permute(\"abc\")
//
abc
acb
bac
bca
cab
cba

这给了我想要的结果。

但是当我尝试在整数数组上实现相同的逻辑时:

def permute(nums):
    lst = []
    permuteHelper(nums, [], lst)

def permuteHelper(nums,chosen, lst):
    if len(nums) == 0:
        print(chosen)
        
    else:
        for i in range(len(nums)):
        #choose
            currNum = nums[i]
            chosen.append(currNum)
            nums.pop(i)
        #explore
            permuteHelper(nums,chosen,lst)
        #unchoose
            nums.insert(i,currNum)
            chosen = chosen[:-1]

permute([1,2,3])
//
[1, 2, 3]
[1, 2, 3, 2]
[1, 2, 2, 1, 3]
[1, 2, 2, 1, 3, 1]
[1, 2, 2, 1, 3, 1, 2]
[1, 2, 2, 1, 3, 1, 2, 1]

我正在寻找的结果是:

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

为什么 permute for numbers 的作用不一样?

    标签: python subset permutation backtracking


    【解决方案1】:

    嗨,我刚从 python 开始,所以我不能告诉你为什么不能那样工作。

    selected = selected[:-1] 似乎没有将其移交给下一个循环

    如果您选择,它会起作用:

    选择.pop()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2019-11-25
      • 1970-01-01
      • 2019-01-30
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多