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] ]
解题思路:
这道题比较关键的一个点就是“互不相同的整数集合”,这样就大大降低了题目的难度。我采用了递归的做法,逐步地缩小问题的规模,先对列表进行一个循环,剔除相应的整数得到比原来列表小1的新列表,对这个新列表求全排列之后,再在每个排列前面加上这个被剔除的整数。对新列表同样采取这个做法,如此递归下去,直至列表大小只有1为止。
代码:
class Solution: def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ result = [] if len(nums)==0: result.append([]) elif len(nums)==1: result.append(nums) else: for i in nums: temp_nums = nums[:] temp_nums.remove(i) x = temp_nums temp = self.permute(x) for j in range(len(temp)): temp[j] = [i]+temp[j] result.append(temp[j]) return result
反思:
应当指出,这个算法的时间复杂度是非常高的,不过还是能通过测试,似乎需要得到这个全排列,算法复杂度应该为O(n!),至于有没有时间复杂度更小的算法,我还不得而知。