Skip to content

Commit fceacf9

Browse files
CaedenPHgithub-actionstianyizheng02
authored
Fix type errors in permutations (TheAlgorithms#9007)
* updating DIRECTORY.md * types(permuations): Rename permute2 * Apply suggestions from code review Co-authored-by: Tianyi Zheng <[email protected]> * fix(permutations): Call permute_recursive * fix(permutations): Correct permutations order --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Tianyi Zheng <[email protected]>
1 parent c7aeaa3 commit fceacf9

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed
+13-15
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
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

4443
if __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

Comments
 (0)