回溯 90 子集2

2021-10-07 07:12:43 字數 1052 閱讀 2671

給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。

說明:解集不能包含重複的子集。

輸入: [1,2,2]

輸出:[

[2],

[1],

[1,2,2],

[2,2],

[1,2],

]和78類似。但是對於有重複元素的陣列:

要先進行排序。

要進行判重。begin代表的是第幾層,i代表的是當前層的第幾個數字。【1 2(第乙個2) 5】中的2是第begin層的第i=begin個數字。【1 2 (第二個2)5】是第begin層的第i+1>begin個數字。當出現i > begin && candidates[i] == candidates[i - 1] 的時候,表明遍歷到了同一層的不同的數字。那麼屬於不同位置重複數字的情況。

在進入下一層迴圈的時候begin要加1避免重複使用自身。

public list

>

subsetswithdup

(int

nums)

arrays.

sort

(nums)

;int len = nums.length;

list

list =

newarraylist

<

>()

;dfs

(nums,

0,list,len,res)

;return res;

}public

void

dfs(

int[

]nums,

int begin,list

list,

int len,list

> res)

list.

add(nums[i]);

dfs(nums,i+

1,list,len,res)

; list.

remove

(list.

size()

-1);

}}

演算法 回溯 求子集2

給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 1,2,2 輸出 2 1 1,2,2 2,2 1,2 和演算法 回溯 位運算 求子集類似,只不過需要剔除相同的組合。class solution arrays.sort nums ...

90 子集 II 46 全排列 回溯 剪枝

給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 1,2,2 輸出 2 1 1,2,2 2,2 1,2 param nums return var subsetswithdup function nums let tmppath ...

子集 回溯演算法

採用回溯演算法,每個數有兩種情況,選中或不選中 class solution void dfs vector nums,int len 將當前數新增到path中 代表選中該數 path.push back nums len dfs nums,len 1 將該數去掉 代表不選中該數 path.pop ...