全排列 五种写法

BFS

def permutation(nums):
    if not nums:
        return []
    if len(nums) == 1:
        return [nums]

    res, size = [], len(nums)
    q = collections.deque()
    q.append([])

    while q:
        n = q.pop()
        if len(n) == size:
            res.append(n[:])
            continue
        for x in nums:
            if x not in n:
                q.append(n+[x])

    return res
    
#input:  [1, 2, 3]
# output: [[3, 2, 1], [3, 1, 2], [2, 3, 1], [2, 1, 3], [1, 3, 2], [1, 2, 3]]

DFS,用集合实现 used

DFS 改进写法,用位运算作实现 used,数据量很大的时候可以节省不少内存。在其它语言中,当数据量很大的时候,used 可以用数组来表示。譬如 64位机器上,可以 setBit = lambda arr, i: arr[i // 64] |= (1 << (i % 64))

分治的思想

DFS,多一点栈空间

最后更新于

这有帮助吗?