leetcode 46 permutations

题目:
Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]
Output:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

题目翻译:
给出一串不同的数,列出它们所有的排列组合

题解:
此题使用递归的方法,即,回溯的方法。找规律发现,给出的列表的排列组合等于,头元素的排列组合加上除了头元素的排列组合,而每一个元素都有一次充当头元素的机会,故,算法如下:

注:由于这是用python写的,对ans使用的append方法,有一个隐藏的问题是,把每一个nums都append进去后,当nums改变时,ans中的值也会改变,所以ans中append进去的是nums的副本,即,用copy函数。

class Solution(object):
    def permute(self,nums):
        ans=[]
        #使用递归
        permutation(nums,0,len(nums),ans)
        return ans
def permutation(nums,i,length,ans):
    #当剩下仅有1个元素时,直接添加,无需再排列
    if i==length-1:
        temp=nums.copy()
        ans.append(temp)
    else:
        for j in range(i,length):
            temp=nums[j]
            nums[j]=nums[i]
            nums[i]=temp
            permutation(nums,i+1,length,ans)
            temp=nums[j]
            nums[j]=nums[i]
            nums[i]=temp

#这是测试部分,提交时不需要加
nums=[1,2,3,4]
print(Solution().permute(nums))

猜你喜欢

转载自blog.csdn.net/shu_xi/article/details/80175753