From f1596fc17fe13c127c7ceebf7dc54965b3370910 Mon Sep 17 00:00:00 2001 From: Sundaram Kumar Jha <93595231+sundaram2021@users.noreply.github.com> Date: Thu, 26 Jan 2023 13:14:56 +0530 Subject: [PATCH 01/11] Update permutations.py Earlier in the permutation function it is creating an infinite recursion which is causing an error instead of that I used backtracking to get the output --- data_structures/arrays/permutations.py | 30 +++++++++++++++----------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index eb3f26517863..754da4dde367 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -1,4 +1,5 @@ -def permute(nums: list[int]) -> list[list[int]]: +from typing import List +def permute(nums: List[int]) -> List[List[int]]: """ Return all permutations. @@ -7,20 +8,23 @@ def permute(nums: list[int]) -> list[list[int]]: >>> all(list(nums) in permute(numbers) for nums in permutations(numbers)) True """ - result = [] - if len(nums) == 1: - return [nums.copy()] - for _ in range(len(nums)): - n = nums.pop(0) - permutations = permute(nums) - for perm in permutations: - perm.append(n) - result.extend(permutations) - nums.append(n) - return result + def backtrack(first=0): + if first == n: + output.append(nums[:]) + for i in range(first, n): + nums[first], nums[i] = nums[i], nums[first] + backtrack(first + 1) + nums[first], nums[i] = nums[i], nums[first] + n = len(nums) + output = [] + backtrack() + return output + + # return result if __name__ == "__main__": import doctest - + res = permute([1,2,3]) + print(res) doctest.testmod() From ba7380489c9dd87b699078a8dca09ed9ece293a7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 07:48:00 +0000 Subject: [PATCH 02/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/permutations.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 754da4dde367..848f3fb04cfb 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -1,5 +1,7 @@ from typing import List -def permute(nums: List[int]) -> List[List[int]]: + + +def permute(nums: list[int]) -> list[list[int]]: """ Return all permutations. @@ -8,6 +10,7 @@ def permute(nums: List[int]) -> List[List[int]]: >>> all(list(nums) in permute(numbers) for nums in permutations(numbers)) True """ + def backtrack(first=0): if first == n: output.append(nums[:]) @@ -21,10 +24,12 @@ def backtrack(first=0): backtrack() return output - # return result + + if __name__ == "__main__": import doctest - res = permute([1,2,3]) + + res = permute([1, 2, 3]) print(res) doctest.testmod() From ae6d10bfcd840ff4371a5f5e335e229ff692be87 Mon Sep 17 00:00:00 2001 From: Sundaram Kumar Jha <93595231+sundaram2021@users.noreply.github.com> Date: Thu, 26 Jan 2023 13:41:28 +0530 Subject: [PATCH 03/11] updated permutation.py modified permute function which is using recursive methode to permute2 function which is using backtracking to find the output --- data_structures/arrays/permutations.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 848f3fb04cfb..917b6186eff5 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -4,12 +4,27 @@ def permute(nums: list[int]) -> list[list[int]]: """ Return all permutations. - >>> from itertools import permutations >>> numbers= [1,2,3] >>> all(list(nums) in permute(numbers) for nums in permutations(numbers)) True """ + result = [] + if len(nums) == 1: + return [nums.copy()] + for _ in range(len(nums)): + n = nums.pop(0) + permutations = permute(nums) + for perm in permutations: + perm.append(n) + result.extend(permutations) + nums.append(n) + return result + + + + +def permute2(nums: List[int]) -> List[List[int]]: def backtrack(first=0): if first == n: @@ -30,6 +45,7 @@ def backtrack(first=0): if __name__ == "__main__": import doctest - res = permute([1, 2, 3]) + # use res to print the data in permute2 function + res = permute2([1, 2, 3]) print(res) doctest.testmod() From 74b95ce9c124c4b83be83a10ef974b63494afded Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 08:13:21 +0000 Subject: [PATCH 04/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/permutations.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 917b6186eff5..cd1bb75ab4ef 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -22,10 +22,7 @@ def permute(nums: list[int]) -> list[list[int]]: return result - - -def permute2(nums: List[int]) -> List[List[int]]: - +def permute2(nums: list[int]) -> list[list[int]]: def backtrack(first=0): if first == n: output.append(nums[:]) From 589b66374f54402747614faf6667627a3d88b31a Mon Sep 17 00:00:00 2001 From: Sundaram Kumar Jha <93595231+sundaram2021@users.noreply.github.com> Date: Thu, 26 Jan 2023 13:57:00 +0530 Subject: [PATCH 05/11] updated added list module to Permute2 function --- data_structures/arrays/permutations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index cd1bb75ab4ef..88c20c731bd2 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -22,7 +22,7 @@ def permute(nums: list[int]) -> list[list[int]]: return result -def permute2(nums: list[int]) -> list[list[int]]: +def permute2(nums: List[int]) -> List[List[int]]: def backtrack(first=0): if first == n: output.append(nums[:]) From abf4308011d66de746391f01ba0df3d17c564de8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 08:27:54 +0000 Subject: [PATCH 06/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/permutations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 88c20c731bd2..cd1bb75ab4ef 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -22,7 +22,7 @@ def permute(nums: list[int]) -> list[list[int]]: return result -def permute2(nums: List[int]) -> List[List[int]]: +def permute2(nums: list[int]) -> list[list[int]]: def backtrack(first=0): if first == n: output.append(nums[:]) From 7c4123ab2dd0dcf03d38f0c83a42f90c02bb10e2 Mon Sep 17 00:00:00 2001 From: Sundaram Kumar Jha Date: Mon, 24 Apr 2023 15:27:45 +0530 Subject: [PATCH 07/11] deleted import --- data_structures/arrays/permutations.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index cd1bb75ab4ef..26431e546fa7 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -1,5 +1,3 @@ -from typing import List - def permute(nums: list[int]) -> list[list[int]]: """ From 18b474d6587a29cb53729ebdaaad1e7099b1d986 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 09:59:25 +0000 Subject: [PATCH 08/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/permutations.py | 1 - 1 file changed, 1 deletion(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 26431e546fa7..4d6c4559e825 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -1,4 +1,3 @@ - def permute(nums: list[int]) -> list[list[int]]: """ Return all permutations. From 3880ab932f8e9f70591e7f4bc28c140c1c5f146f Mon Sep 17 00:00:00 2001 From: Sundaram Kumar Jha Date: Wed, 17 May 2023 20:19:48 +0530 Subject: [PATCH 09/11] Update permutations.py added test case in permute2 fuction --- data_structures/arrays/permutations.py | 27 ++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 4d6c4559e825..0e9ea99b6ba2 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -19,26 +19,29 @@ def permute(nums: list[int]) -> list[list[int]]: return result -def permute2(nums: list[int]) -> list[list[int]]: - def backtrack(first=0): - if first == n: +def permute2(nums): + """ + Return all permutations of the given list. + + >>> permute2([1, 2, 3]) + [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]] + """ + def backtrack(start): + if start == len(nums) - 1: output.append(nums[:]) - for i in range(first, n): - nums[first], nums[i] = nums[i], nums[first] - backtrack(first + 1) - nums[first], nums[i] = nums[i], nums[first] + else: + for i in range(start, len(nums)): + nums[start], nums[i] = nums[i], nums[start] + backtrack(start + 1) + nums[start], nums[i] = nums[i], nums[start] # backtrack - n = len(nums) output = [] - backtrack() + backtrack(0) return output - # return result - if __name__ == "__main__": import doctest - # use res to print the data in permute2 function res = permute2([1, 2, 3]) print(res) From 64f0654deb4dd88638cee1de0024b393a040d26f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 14:52:18 +0000 Subject: [PATCH 10/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/permutations.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 0e9ea99b6ba2..31d88c96fc21 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -26,6 +26,7 @@ def permute2(nums): >>> permute2([1, 2, 3]) [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]] """ + def backtrack(start): if start == len(nums) - 1: output.append(nums[:]) @@ -42,6 +43,7 @@ def backtrack(start): if __name__ == "__main__": import doctest + # use res to print the data in permute2 function res = permute2([1, 2, 3]) print(res) From aa4f3a978b61268c8f79cb0e310fd2d5c1467ed7 Mon Sep 17 00:00:00 2001 From: Chris O <46587501+ChrisO345@users.noreply.github.com> Date: Fri, 19 May 2023 14:26:12 +1200 Subject: [PATCH 11/11] Update data_structures/arrays/permutations.py --- data_structures/arrays/permutations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py index 31d88c96fc21..4558bd8d468a 100644 --- a/data_structures/arrays/permutations.py +++ b/data_structures/arrays/permutations.py @@ -24,7 +24,7 @@ def permute2(nums): Return all permutations of the given list. >>> permute2([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):