47全排列二

2021-09-28 17:35:15 字數 876 閱讀 1410

題目:

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

示例:輸入: [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...