全排列 五种写法
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,多一点栈空间
最后更新于
这有帮助吗?