【问题标题】:Why this code for "printing permutations of a string" is not working, printing the original string everytime为什么这个“打印字符串排列”的代码不起作用,每次都打印原始字符串
【发布时间】:2021-11-11 16:49:06
【问题描述】:

无法理解这段代码的错误在哪里 这是递归解决方案,我用 C++ 编写了相同的逻辑,但它在 python 中不起作用

 class Solution:
        def permute(self, nums: List[int]) -> List[List[int]]:
            arr = []
            def per(nums,i):
                if i == len(nums)-1:
                    arr.append(nums)
                    return
                for j in range(i,len(nums)):
                    nums[i],nums[j] = nums[j],nums[i]
                    per(nums,i+1)
                    nums[i],nums[j] = nums[j],nums[i]
            per(nums,i=0)
            return arr
    
    #input: nums = [1,2,3]
    #my output: [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
    #correct output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

【问题讨论】:

标签: python recursion permutation backtracking


【解决方案1】:

问题是,你总是在同一个列表上工作,相对于 C++,python 不会为每个函数调用创建一个新列表,这意味着你要添加到 arr,始终完全相同的列表。正如 cmets 中所说,您可以传递一个调用 list 构造函数的新列表。

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多