2020 10 22每天一刷

2021-10-25 02:51:34 字數 1910 閱讀 1471

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

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

示例:輸入: [1,2,2]

輸出:[

[2],

[1],

[1,2,2],

[2,2],

[1,2],

]思路:本題和之前題的區別在於,原集合中的元素是重複的,結果要求和之前的題相同(不能夠含有重複的子集),在上一題上改機即可。首先給原陣列的函式排序,然後用回溯法得到每一種子集,再用set對子集的結果進行去重,最後得到想要答案。

class

solution

private

:void

generate

(int i,vector<

int>

& nums,vector<

int>

& item, vectorint>>

& result, setint>>

& res_set)

item.

push_back

(nums[i]);

if(res_set.

find

(item)

== res_set.

end())

generate

(i+1

,nums,item,result,res_set)

; item.

pop_back()

;generate

(i+1

,nums,item,result,res_set);}

};

candidates 中的每個數字在每個組合中只能使用一次。

說明:

所有數字(包括目標數)都是正整數。

解集不能包含重複的組合。

示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,

所求解集為:

[[1, 7],

[1, 2, 5],

[2, 6],

[1, 1, 6]

]示例 2:

輸入: candidates = [2,5,2,1,2], target = 5,

所求解集為:

[[1,2,2],

[5]]

思路: 回溯法解決問題,通過剪支來降低問題的複雜度。

class

solution

private

:void

generate

(int i,vector<

int>

& nums,vector<

int>

& item,vectorint>>

& result,

setint>>

& res_set,

int sum,

int target)

sum +

= nums[i]

; item.

push_back

(nums[i]);

if(target == sum && res_set.

find

(item)

== res_set.

end())

generate

(i+1

,nums,item,result,res_set,sum,target)

; sum -

= nums[i]

; item.

pop_back()

;generate

(i+1

,nums,item,result,res_set,sum,target);}

};

每天一刷20200602

問題 寫出乙個程式,接受乙個正浮點數值,輸出該數值的近似整數值。如果小數點後數值大於等於5,向上取整 小於5,則向下取整。思路 其實就是實現乙個正浮點數的四捨五入,可以呼叫math.h中的round 函式直接完成,有點討巧。include include using namespace std in...

每天一刷20200603

問題 編寫乙個函式,計算字串中含有的不同字元的個數。字元在acsii碼範圍內 0 127 換行表示結束符,不算在字元裡。不在範圍內的不作統計。注意是不同的字元 思路 跟之前做過的乙個題相似,那個題是字串去重,稍作修改就行了。include include using namespace std in...

每天一刷20200605

昨天返校,沒有做題。問題 功能 等差數列 2,5,8,11,14 輸入 正整數n 0 輸出 求等差數列前n項和 返回 轉換成功返回 0 非法輸入與異常返回 1 思路 這個題其實就是簡單的等差數列求和,設定好初始項,然後控制好迴圈次數即可。ps 在處理輸入的時候要注意用while 來讀取輸入,不然提交...