The Algorithms logo
The Algorithms
AboutDonate

Permutations

S
A
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):
    """
    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[:])
        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

    output = []
    backtrack(0)
    return output


if __name__ == "__main__":
    import doctest

    # use res to print the data in permute2 function
    res = permute2([1, 2, 3])
    print(res)
    doctest.testmod()