Permutations

LeetCode 46 · View on LeetCode

Backtracking with a used-set. At each position, try every unused number. When the path length equals the input length, record the permutation.

def permute(nums: list[int]) -> list[list[int]]:
    result = []
    def backtrack(path: list[int], used: set[int]):
        if len(path) == len(nums):
            result.append(path[:])
            return
        for num in nums:
            if num not in used:
                used.add(num)
                path.append(num)
                backtrack(path, used)
                path.pop()
                used.discard(num)
    backtrack([], set())
    return result

if __name__ == '__main__':
    print(permute([1, 2, 3]))
    # [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

    print(permute([0, 1]))
    # [[0,1],[1,0]]
© 2026 ByteLearn.dev. Free courses for developers. · Privacy