題目
給定乙個可包含重複數字的序列,返回所有不重複的全排列。
輸入: [1,1,2]
輸出:[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路
之前做過全排列。所以思路是,可以先全排列,獲得結果 res
然後再逐項比較,將不重複的項新增到最終結果集 response 中
from typing import list
class
solution
:def
permuteunique
(self, nums: list[
int])-
> list[list[
int]]:
res =
temp =
deffun
(l):
size =
len(l)
if size ==0:
:])return
for i in
range
(size):)
fun(l[
:i]+l[i+1:
])temp.pop(
) fun(nums)
temp =
set(
) response =
for i in res:
i_str =
''.join(
[str
(j)for j in i]
)if i_str not
in temp:
temp.add(i_str)
return response
if __name__ ==
'__main__'
: res = solution(
).permuteunique([1
,1,2
])print
(res)
優化
既然是先加入,再排除,那,我們可以在第一次加入res的時候,就判斷條件是否滿足。
優化**如下:
from typing import list
class
solution
:def
permuteunique
(self, nums: list[
int])-
> list[list[
int]]:
res =
temp =
middle =
set(
)def
fun(l)
: size =
len(l)
if size ==0:
i_str =
''.join(
[str
(j)for j in temp]
)if i_str not
in middle:
middle.add(i_str):]
)return
for i in
range
(size):)
fun(l[
:i]+l[i+1:
])temp.pop(
) fun(nums)
# temp = set()
# response =
# for i in res:
# i_str = ''.join([str(j) for j in i])
# if i_str not in temp:
# temp.add(i_str)
return res
if __name__ ==
'__main__'
: res = solution(
).permuteunique([1
,1,2
])print
(res)
全排列不重複
include include include using namespace std int h 256 define n 100 char indexss 儲存上乙個排列的值 重複的排列是相鄰的 void quanpaiwithoutrepety char a,int len,int index...
不可重複全排列。。。。
比如說 122 有重複數字 想想如何計算個數,就是全排列除以重複的全排列 只要讓重複的有順序就好了。於是用個used 來計算個數,第n個只有在第n 1個用過之後才能用。這樣就 ok 了 include include include include include include include i...
演算法 全排列
從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。用演算法分別實現全排列,其中n個元素儲存在乙個長度為n的陣列中。實現全排列之前,先看一下對進行全排列的一種方法 從圖中可以看出,我們首先從n個元素中取出乙個元...