
### https stackoverflow.com/questions/76577865/
### understanding-the-for-loop-in-python-permutation-
### algorithm-back-tracking

class Solution:
    def permute(self, nums: list[int]) -> list[list[int]]:
        res = []

        def backtrack(path, visited):
            if len(path) == len(nums):
                res.append(path)
                return

            for i in range(len(nums)):
                if not visited[i]:
                    visited[i] = True
                    backtrack(path + [nums[i]], visited)
                    visited[i] = False

        backtrack([], [False] * len(nums))
        return res

print(Solution().permute(nums=[1, 2, 3]))

## [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1],
##  [3, 1, 2], [3, 2, 1]]

