Python 3 | 简单解答
有重复项数字的所有排列
http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
例: [1, 1, 2, 3]
步骤:
[1] + permuteUnique([1, 2, 3])中的每一个item
[1]重复了,直接跳过
[2] + permuteUnique([1, 1, 3])中的每一个item
[3] + permuteUnique([1, 1, 2])中的每一个item
基本思路:
遍历list中每一个value,如果value没有出现过,[value] + permuteUnique(去掉本value的list)中的每一个item就是一个结果
需要一个dict记录一个value出现过没有
注意边缘情况, length = 0 和 1
class Solution: def permuteUnique(self, num): if len(num) == 0: return [] if len(num) == 1: return [num] result = [] dict = {} for idx, value in enumerate(num): if value not in dict: dict[value] = True tmp = self.permuteUnique(num[: idx] + num[idx + 1:]) for item in tmp: current = [value] + item result.append(current) else: continue return result