Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2] have
the following unique permutations:
[1,1,2], [1,2,1],
and [2,1,1].
Permutations的扩展题,不同的是这题里可能会出现重复元素~解法其实也是类似的,注意处理重复元素就可以了~ 先对数组排序,然后判断当前元素是否与上一个元素相同~
class Solution:
# @param num, a list of integer
# @return a list of lists of integers
def permuteUnique(self, num):
if num is None or len(num) == 0: return []
if len(num) == 1: return [num]
num.sort()
res = []; prev = None
for i in xrange(len(num)):
if num[i] == prev:
continue
prev = num[i]
for j in self.permuteUnique(num[:i] + num[i + 1:]):
res.append([num[i]] + j)
return resclass Solution:
# @param num, a list of integer
# @return a list of lists of integers
def permuteUnique(self, num):
if num is None or len(num) == 0: return []
if len(num) == 1: return [num]
num.sort()
self.res = []
self.helper(num, [False] * len(num), [])
return self.res
def helper(self, num, used, item):
if len(item) == len(num):
self.res.append(item)
return
for i in xrange(len(num)):
if i > 0 and not used[i - 1] and num[i] == num[i - 1]: continue
if not used[i]:
used[i] = True
self.helper(num, used, item + [num[i]])
used[i] = False
本文介绍了一种算法,用于处理包含重复元素的集合,并返回所有可能的唯一排列组合。通过示例说明了如何实现该算法,包括对输入进行排序并检查相邻元素是否相同,以避免生成重复的排列。
657

被折叠的 条评论
为什么被折叠?



