[LeetCode]题解(python):046-Permutations

题目来源:

  https://leetcode.com/problems/permutations/


 

题意分析:

  给定一个数字的集合,输出他们的所有排序情况(也就是全排列)。不要求排序顺序。也就是[1,2]得到[[1,2],[2,1]]或者[[2,1],[1,2]]都是对的。


 

题目思路:

  ①刚开始的思路是先将nums[:n - 1]的所有情况输出,然后这些结果,每个在不同的位置插入最后一个数。然后就很快出来结果了。这个用递归的方法很容易实现。

  ②用前面一题的思想。给出一个排列情况,输出下一个排列的结果,然后将其append到结果里面输出就可以了。

  两个方法的时间复杂度都是O(n!)


 

代码(python):

 1 class Solution(object):
 2     def solve(self,nums,n):
 3         if n == 0:
 4             return [[nums[0]]]
 5         tmp = self.solve(nums,n - 1);ans = []
 6         for i in tmp:
 7             for j in range(len(i) + 1):
 8                 t = i[:];t.insert(j,nums[n])
 9                 ans.append(t)
10         return ans
11     def permute(self, nums):
12         """
13         :type nums: List[int]
14         :rtype: List[List[int]]
15         """
16         size = len(nums)
17         if size == 0:
18             return []
19         nums.sort()
20         return self.solve(nums,size - 1)
21         
递归
 1 class Solution(object):
 2     def nextp(self,nums):
 3         size = len(nums);i = size - 2
 4         while i >= 0:
 5             if nums[i] < nums[i + 1]:
 6                 j = i + 1
 7                 while j < size:
 8                     if nums[i] >= nums[j]:
 9                         break
10                     j += 1
11                 j -= 1
12                 nums[i],nums[j] = nums[j],nums[i]
13                 ans = nums[:i + 1] + nums[:i:-1]
14                 return ans
15             i -= 1
16         ans = nums[::-1]
17         return ans
18     def permute(self, nums):
19         """
20         :type nums: List[int]
21         :rtype: List[List[int]]
22         """
23         size = len(nums)
24         if size == 0:
25             return []
26         nums.sort();tmp = nums[:];ans = []
27         ans.append(nums)
28         while True:
29             tmp = self.nextp(tmp)
30             if tmp != nums:
31                 t = tmp[:]
32                 ans.append(t)
33             else:
34                 break
35         return ans
next_permutaion

 


 

转载请注明出处:http://www.cnblogs.com/chruny/p/4953694.html

posted @ 2015-11-10 17:22  Ry_Chen  阅读(475)  评论(0编辑  收藏  举报