原題地址: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