题目
思路
DFS
代码1(递归)
class Solution:
"""
@param: nums: A list of integers.
@return: A list of permutations.
"""
def __init__(self):
self.used = {}
self.res_list = []
def dfs(self, index, nums, num_list):
if index == len(nums):
self.res_list.append(num_list[:])
for i, v in enumerate(nums):
if v not in self.used or not self.used[v]:
self.used[v] = 1
num_list.append(v)
self.dfs(index + 1, nums, num_list)
num_list.pop(-1)
self.used[v] = 0
def permute(self, nums):
# write your code here
if not nums: return [[]]
for i, v in enumerate(nums):
self.used[v] = 1
self.dfs(1, nums, [v])
self.used[v] = 0
return self.res_list
代码2(非递归)
class Solution:
"""
@param: nums: A list of integers.
@return: A list of permutations.
"""
def permute(self, nums):
# write your code here
if not nums: return [[]]
stack = []
res_list = []
for i, v in enumerate(nums):
stack.append([1, [v]])
while stack:
index, num_list = stack[-1][0], stack[-1][1]
stack.pop(-1)
if index == len(nums):
res_list.append(num_list[:])
else:
for i, v in enumerate(nums):
if v not in num_list:
num_list.append(v)
stack.append([index + 1, num_list[:]])
num_list.pop(-1)
return res_list