leetcode: 46. Permutations

来源:互联网 发布:天猫淘宝优惠卷代理 编辑:程序博客网 时间:2024/06/11 13:05

Q

Given a collection of distinct numbers, return all possible permutations.

Example

For example,[1,2,3] have the following permutations:[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]]

AC

class Solution(object):    def permute(self, nums):        """        :type nums: List[int]        :rtype: List[List[int]]        """        return self.sub(nums)    def sub(self, nums):        if len(nums) == 0: return [[]]        if len(nums) == 1: return [nums]        pattern = self.sub(nums[1:])        c = []        for i in xrange(len(nums)):            for p in pattern:                c.append(p[:i] + [nums[0]] + p[i:])        return c# Time:  O(n * n!)# Space: O(n)class Solution2(object):    def permute(self, num):        result = []        used = [False] * len(num)        self.permuteRecu(result, used, [], num)        return result    def permuteRecu(self, result, used, cur, num):        if len(cur) == len(num):            result.append(cur + [])            return        for i in xrange(len(num)):            if not used[i]:                used[i] = True                cur.append(num[i])                self.permuteRecu(result, used, cur, num)                cur.pop()                used[i] = Falseif __name__ == "__main__":    assert Solution().permute([1, 2, 3]) == [[1, 2, 3], [1, 3, 2], [2, 1, 3], [3, 1, 2], [2, 3, 1], [3, 2, 1]]