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!),至于有没有时间复杂度更小的算法,我还不得而知。