作业(2018-05-02,第九周周三)

Leetcode    46Permutations

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

猜你喜欢

转载自blog.csdn.net/baidu_41300735/article/details/80213254