1- def permute (nums : list [int ]) -> list [list [int ]]:
1+ def permute_recursive (nums : list [int ]) -> list [list [int ]]:
22 """
33 Return all permutations.
4- >>> from itertools import permutations
5- >>> numbers= [1,2,3]
6- >>> all(list(nums) in permute(numbers) for nums in permutations(numbers))
7- True
4+
5+ >>> permute_recursive([1, 2, 3])
6+ [[3, 2, 1], [2, 3, 1], [1, 3, 2], [3, 1, 2], [2, 1, 3], [1, 2, 3]]
87 """
9- result = []
10- if len (nums ) == 1 :
11- return [nums . copy () ]
8+ result : list [ list [ int ]] = []
9+ if len (nums ) == 0 :
10+ return [[] ]
1211 for _ in range (len (nums )):
1312 n = nums .pop (0 )
14- permutations = permute (nums )
13+ permutations = permute_recursive (nums )
1514 for perm in permutations :
1615 perm .append (n )
1716 result .extend (permutations )
1817 nums .append (n )
1918 return result
2019
2120
22- def permute2 (nums ) :
21+ def permute_backtrack (nums : list [ int ]) -> list [ list [ int ]] :
2322 """
2423 Return all permutations of the given list.
2524
26- >>> permute2 ([1, 2, 3])
25+ >>> permute_backtrack ([1, 2, 3])
2726 [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
2827 """
2928
30- def backtrack (start ) :
29+ def backtrack (start : int ) -> None :
3130 if start == len (nums ) - 1 :
3231 output .append (nums [:])
3332 else :
@@ -36,15 +35,14 @@ def backtrack(start):
3635 backtrack (start + 1 )
3736 nums [start ], nums [i ] = nums [i ], nums [start ] # backtrack
3837
39- output = []
38+ output : list [ list [ int ]] = []
4039 backtrack (0 )
4140 return output
4241
4342
4443if __name__ == "__main__" :
4544 import doctest
4645
47- # use res to print the data in permute2 function
48- res = permute2 ([1 , 2 , 3 ])
46+ res = permute_backtrack ([1 , 2 , 3 ])
4947 print (res )
5048 doctest .testmod ()
0 commit comments