python--lintcode15.全排列

描述

给定一个数字列表,返回其所有可能的排列。

你可以假设没有重复数字。
您在真实的面试中是否遇到过这个题?
样例

给出一个列表[1,2,3],其全排列为:

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

挑战

使用递归和非递归分别解决。

这一题属于排列问题,依然使用DFS。排列问题就要考虑是否选取了重复元素的问题,所以需要一个辅助数组来记录一个数是否被选过。
代码如下:

class Solution:
    """
    @param: nums: A list of integers.
    @return: A list of permutations.
    """
    def permute(self, nums):
        # write your code here
        def search(nums,lists,index):
            if(len(nums)==len(lists)):
                self.result.append(lists)
                return
            for i in range(0,len(nums)):
                if(self.flag[i]==1):continue
                else :
                    self.flag[i]=1
                    search(nums,lists+[nums[i]],index+1)
                    self.flag[i]=0

        self.result=[]

        self.flag=[]
        for i in range(len(nums)):
            self.flag.append(0)
        search(nums,[],0)
        return self.result


s = Solution()
print(s.permute([1,2,3]))

猜你喜欢

转载自blog.csdn.net/wenqiwenqi123/article/details/80539727