46. Permutations (全排列)
Given a collection of distinct numbers, return all possible permutations.
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] ]
运用递归。 1234为例子
for i in 1234:
1 + 234(的全排列)
2 + 134(的全排列)
3 + 124(的全排列)
4 + 123 (的全排列)
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: res = [] def batracking(path,used): #print(path) if len(nums) == len(path): res.append(path.copy()) return for i in range(0,len(nums)): if used[i]: continue used[i] = 1 batracking(path+[nums[i]],used) used[i] = 0 used = [0] * len(nums) batracking([],used) return res
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: res = [] def batracking(path): #print(path) if len(nums) == len(path): res.append(path.copy()) return for i in range(0,len(nums)): if nums[i] in set(path): continue batracking(path+[nums[i]]) batracking([]) return res
1 class Solution(object): 2 def __init__(self): 3 self.res = [] 4 5 def permute(self, nums): 6 """ 7 :type nums: List[int] 8 :rtype: List[List[int]] 9 """ 10 self.help(nums, 0, len(nums)) 11 12 return self.res 13 14 def help(self, a, lo, hi): 15 if(lo == hi): 16 self.res.append(a[0:hi]) 17 for i in range(lo, hi): 18 self.swap(a, i, lo) 19 self.help(a, lo + 1, hi) 20 self.swap(a, i, lo) 21 def swap(self, a, i, j): 22 temp = a[i] 23 a[i] = a[j] 24 a[j] = temp
非递归
1 class Solution(object): 2 3 4 def permute(self, nums): 5 """ 6 :type nums: List[int] 7 :rtype: List[List[int]] 8 """ 9 nums = sorted(nums.copy()) 10 res = [nums.copy()] 11 12 n = self.next_permute(nums) 13 while True: 14 15 if n is None: 16 break 17 res.append(n) 18 n = self.next_permute(n.copy()) 19 20 return res 21 22 def next_permute(self, a): 23 i = -1 24 for index in range(0, len(a) - 1)[::-1]: 25 if(a[index] < a[index + 1]): 26 i = index 27 break 28 if i==-1: 29 return None 30 min_i = a.index(min([k for k in a[i+1:] if k >a[i]])) 31 self.swap(a, i, min_i) 32 an = a[:i + 1] + self.revers(a[i + 1:]) 33 return an 34 35 def revers(self, x): 36 for i in range(int(len(x) / 2)): 37 temp = x[i] 38 x[i] = x[len(x) - i - 1] 39 x[len(x) - i - 1] = temp 40 return x 41 42 def swap(self, a, i, j): 43 temp = a[i] 44 a[i] = a[j] 45 a[j] = temp