leetcode演算法題 劃分為k個相等的子集

2021-10-04 19:28:40 字數 851 閱讀 8736

遞迴的方法其實不難想,但是很難寫。很容易想到,求出子集的和sum,然後找出是否存在正好k個子集的和都等於sum。這裡的比較有技巧的點是,如果需要k個子集,那麼建k個桶groups,每個桶都初始化為sum。接著就進入遞迴,遞迴傳入初始索引pos從0開始,在遞迴內部對groups進行迴圈,當索引pos大於nums範圍時,說明所有groups都已經被填滿了,因為nums的和一定是等於groups的和。

bool

canpartitionksubsets

(vector<

int>

& nums,

int k)

else

sort

(nums.

begin()

,nums.

end(

),greater<

int>()

);vector<

int>

groups

(k,sum)

;return

cansubsets

(nums,

0,groups);}

bool

cansubsets

(vector<

int>

& nums,

int pos,vector<

int>

& groups)

int len=groups.

size()

;for

(int i=

0;igroups[i]

+=nums[pos]

;//pos不該在桶中,拿出}}

return

false

;}

演算法實踐 劃分為k個相等的子集 遞迴)

給定乙個整數陣列nums和乙個正整數k,找出是否有可能把這個陣列分成k個非空子集,其總和都相等。輸入 nums 4,3,2,3,5,2,1 k 4 輸出 true 說明 有可能將其分成 4 個子集 5 1,4 2,3 2,3 等於總和。首先,我們知道k個子集的每乙個和必須等於target sum n...

LeetCode 698 劃分為k個相等的子集

給定乙個整數陣列 nums 和乙個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。回溯 因為每個元素都要用上,那取到和為target的一組值,就設定total為0重新取。遞迴終止條件是,當沒有值可取且target等於total。一旦找到這樣的集合,提前阻斷,一直返回true ...

LeetCode698 劃分為k個相等的子集

給定乙個整數陣列 nums 和乙個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。示例 1 輸入 nums 4,3,2,3,5,2,1 k 4 輸出 true 說明 有可能將其分成 4 個子集 5 1,4 2,3 2,3 等於總和。思路 1.計算出每個子集的和,為 sum s...