回溯法 LeetCode 子集和子集II

2021-09-29 11:00:52 字數 2071 閱讀 4859

子集ii

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

輸入: nums = [1,2,3]

輸出:[

[3],

[1],

[2],

[1,2,3],

[1,3],

[2,3],

[1,2],

]

利用 回溯法子集樹模板,調整引數傳入,並且無約束條件無衝突

class

solution

:def

__init__

(self)

: self.data =

self.n =

0 self.tempres =

self.res =

defconflict

(self, k)

:return

false

defbacktrack

(self, k)

:if k>=self.n::]

)else

:for i in[0

,1]:

if i ==1:

)ifnot self.conflict(k)

: self.backtrack(k+1)

if i ==1:

self.tempres.pop(

)def

subsets

(self, nums: list[

int])-

> list[list[

int]]:

self.data = nums

self.n =

len(nums)

self.backtrack(0)

return self.res

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

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

輸入: [1,2,2]

輸出:[

[2],

[1],

[1,2,2],

[2,2],

[1,2],

]

事實上,還是求子集,利用 回溯法子集樹模板 ,先排序,求得所有子集後,去重即可。

class

solution

:def

__init__

(self)

: self.data =

self.n =

0 self.tempres =

self.res =

defconflict

(self, k)

:return

false

defbacktrack

(self, k)

:if k>=self.n:

tuple

(self.tempres)

)else

:for i in[0

,1]:

if i ==1:

)ifnot self.conflict(k)

: self.backtrack(k+1)

if i ==1:

self.tempres.pop(

)def

subsetswithdup

(self, nums: list[

int])-

> list[list[

int]]:

self.data =

sorted

(nums)

self.n =

len(nums)

self.backtrack(0)

return

set(self.res)

LeetCode 子集(回溯法)

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路分析 對於這種選取元素的題,一般回溯法都能輕鬆決解。首先對子集的長度進行窮舉,每次回溯法只尋找相等長度的...

leetcode 78 子集 回溯法

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 class solution return res void recruise vector int num...

子集和問題(回溯法)

第五章5 1 子集和問題 實驗報告 一 問題分析 處理的物件 給定的集合元素的個數和集合以及要湊成的和 要實現的功能 對於給定的集合,計算出它的乙個子集,使得子集內元素的和等於給出的正整數。這乙個子集就是最先計算出的那個子集 演算法思想 當我們給出集合個數n和要湊成的和m以及n個集合元素,我們使用乙...