Fix type errors in permutations (#9007)

* updating DIRECTORY.md

* types(permuations): Rename permute2

* Apply suggestions from code review

Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>

* 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 <tianyizheng02@gmail.com>
This commit is contained in:
Caeden Perelli-Harris 2023-08-22 10:33:47 +01:00 committed by GitHub
parent c7aeaa3fd8
commit fceacf977f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,17 +1,16 @@
def permute(nums: list[int]) -> list[list[int]]: def permute_recursive(nums: list[int]) -> list[list[int]]:
""" """
Return all permutations. Return all permutations.
>>> from itertools import permutations
>>> numbers= [1,2,3] >>> permute_recursive([1, 2, 3])
>>> all(list(nums) in permute(numbers) for nums in permutations(numbers)) [[3, 2, 1], [2, 3, 1], [1, 3, 2], [3, 1, 2], [2, 1, 3], [1, 2, 3]]
True
""" """
result = [] result: list[list[int]] = []
if len(nums) == 1: if len(nums) == 0:
return [nums.copy()] return [[]]
for _ in range(len(nums)): for _ in range(len(nums)):
n = nums.pop(0) n = nums.pop(0)
permutations = permute(nums) permutations = permute_recursive(nums)
for perm in permutations: for perm in permutations:
perm.append(n) perm.append(n)
result.extend(permutations) result.extend(permutations)
@ -19,15 +18,15 @@ def permute(nums: list[int]) -> list[list[int]]:
return result return result
def permute2(nums): def permute_backtrack(nums: list[int]) -> list[list[int]]:
""" """
Return all permutations of the given list. Return all permutations of the given list.
>>> permute2([1, 2, 3]) >>> permute_backtrack([1, 2, 3])
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]] [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
""" """
def backtrack(start): def backtrack(start: int) -> None:
if start == len(nums) - 1: if start == len(nums) - 1:
output.append(nums[:]) output.append(nums[:])
else: else:
@ -36,7 +35,7 @@ def permute2(nums):
backtrack(start + 1) backtrack(start + 1)
nums[start], nums[i] = nums[i], nums[start] # backtrack nums[start], nums[i] = nums[i], nums[start] # backtrack
output = [] output: list[list[int]] = []
backtrack(0) backtrack(0)
return output return output
@ -44,7 +43,6 @@ def permute2(nums):
if __name__ == "__main__": if __name__ == "__main__":
import doctest import doctest
# use res to print the data in permute2 function res = permute_backtrack([1, 2, 3])
res = permute2([1, 2, 3])
print(res) print(res)
doctest.testmod() doctest.testmod()