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]]