LeetCode by python——全排列(Permutations)

题目:

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

思路:

这应该是每个程序员都应该掌握的算法题吧。基本思路就是对应一个排列来说,我们需要遍历一遍nums集合,先确定开头的数字,然后选定下一个数字,就像一棵树一样,在分叉的地方有多个分支,那么这里的分支就是除了开头选定的数字外的其他数字。

代码:

class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        if len(nums) == 0:
            return []
        self.results = []
        for index, num in enumerate(nums):
            tempResult = []
            tempResult.append(num)
            self.helper(nums, tempResult)
        return self.results
    def helper(self,nums,tempResult):
        tempResult1 = copy.deepcopy(tempResult)
        if len(tempResult) == len(nums):
            self.results.append(tempResult1)
        else:
            for num in nums:
                if num not in tempResult1:#遍历没有在tempResult1内的数字
                    tempResult1.append(num)
                    self.helper(nums,tempResult1)
                    tempResult1.pop()

if __name__ =="__main__":
    res = Solution()
    print(res.permute([1,2,3]))
    pass

猜你喜欢

转载自blog.csdn.net/qq_23418043/article/details/82534015
今日推荐