017-46--全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
1 2 3 4 5 6 7 8 9 10 11 | class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if len(nums)<=1: #如果长度是小于等于1那么就只有自身的排列组合 return [nums] #这里一定要注意别忘了中括号 answer=[] #存储最后的结果 for i , num in enumerate(nums): #迭代器,i是index,num是元素 n = nums[:i] + nums[i+1:] #刨除了i位置元素的剩余的所有的元素 for y in self.permute(n): #将n传递给 answer.append([num] + y) return answer |
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if len(nums)<=1: #如果长度是小于等于1那么就只有自身的排列组合 return [nums] #这里一定要注意别忘了中括号 answer=[] #存储最后的结果 for i , num in enumerate(nums): #迭代器,i是index,num是元素 n = nums[:i] + nums[i+1:] #刨除了i位置元素的剩余的所有的元素 print("num:",num) for y in self.permute(n): #进行递归调用,在递归的时候单个这种[3]是一开始的判断返回的千万要注意,自己好好想想调试一下流程 # print(num) print ("y:",y) answer.append([num] + y) print("answer",answer) return answer |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | num: 1 #进入for循环 num: 2 #递归进入循环 y: [3] #长度小于等于1直接返回的就是[3] answer [[2, 3]] #接收以后跟前面的2进行组合成[[2,3]]继续返回.第二个循环在次进行所以下面打印的是3.这个递归的运用一定的好好的想清楚 num: 3 y: [2] answer [[2, 3], [3, 2]] y: [2, 3] answer [[1, 2, 3]] y: [3, 2] answer [[1, 2, 3], [1, 3, 2]] num: 2 num: 1 y: [3] answer [[1, 3]] num: 3 y: [1] answer [[1, 3], [3, 1]] y: [1, 3] answer [[1, 2, 3], [1, 3, 2], [2, 1, 3]] y: [3, 1] answer [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]] num: 3 num: 1 y: [2] answer [[1, 2]] num: 2 y: [1] answer [[1, 2], [2, 1]] y: [1, 2] answer [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]] y: [2, 1] answer [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] |