原題地址:https://oj.leetcode.com/problems/permutations-ii/
題意:
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]
.
解題思路:這道題也是窮舉全排列,只是集合中可能有重複的元素。分兩步:1,對集合進行排序。2,進行剪枝,如果元素重複,直接跳過這一元素,決策樹的這一枝被剪掉。
程式碼:
class Solution:
# @param num, a list of integer
# @return a list of lists of integers
def permuteUnique(self, num):
length = len(num)
if length == 0: return []
if length == 1: return [num]
num.sort()
res = []
previousNum = None
for i in range(length):
if num[i] == previousNum: continue
previousNum = num[i]
for j in self.permuteUnique(num[:i] + num[i+1:]):
res.append([num[i]] + j)
return res