題目:
給定乙個可包含重複數字的序列,返回所有不重複的全排列。
示例:輸入: [1,1,2]
輸出:[
[1,1,2],
[1,2,1],
[2,1,1]
]思路:
就是比46的全排列多了乙個去重的步驟:
1.在回溯完成的時候是否要加進檔案的時候判斷:
if ans not in res:
res加上ans
非常耗時,打敗15%的對手。
2.在回溯過程中判斷數字是否已經回溯過,不再進行回溯。
在for迴圈的過程中,判斷迴圈,只要是第一層第二層就判斷元素是否迴圈過。
for i in range:
i >0 時,num[i]與上乙個不相等,就繼續回溯.
**:
class solution(object):
def permuteunique(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""res=
def backfunc(nums,ans):
if not nums:
#if ans not in res:
return
for i in range(len(nums)):
if i>0 and nums[i]==nums[i-1] :
continue
else:
backfunc(nums[:i]+nums[i+1:],ans+[nums[i]])
nums.sort()
backfunc(nums,)
return res
LeetCode47全排列二
昨天沒有寫,今天補上哈。給定乙個可能包含重複數字的集合,返回所有可能的不同全排列。例如,1,1,2 有以下不同全排列 1,1,2 1,2,1 2,1,1 之前寫的是無重複數字的全排列,這次是有重複數字的,這就需要判斷一下是否要進行交換。在加入判斷時,判斷的範圍要注意,因為一開始沒有搞清楚交換的原理啊...
46 全排列 47 全排列II
46.全排列 這題和之前做的劍指offer上的字串全排列。一樣。分析 1 如果原始要排列的陣列順序為1 2 3 4,現在只要分別交換1 2,1 3,1 4然後對剩下的3個元素進行遞迴的排列。自己的code 100 class solution if start nums.size 1 return ...
LeetCode 47 全排列 II 遞迴
難度 中等 給定乙個可包含重複數字的序列,返回所有不重複的全排列。示例 輸入 1,1,2 輸出 1,1,2 1,2,1 2,1,1 記錄每個數字還能夠被選擇的次數numcnt,在選擇數字時用numcnt代替used。class solution function void int index gen...