給定乙個整數陣列 nums 和乙個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。
回溯:因為每個元素都要用上,那取到和為target的一組值,就設定total為0重新取。遞迴終止條件是,當沒有值可取且target等於total。一旦找到這樣的集合,提前阻斷,一直返回true
注意:對nums從大到小排序,如果最大的大於target,直接返回false。節省時間。
class
solution
:def
canpartitionksubsets
(self, nums, k)
: target =
sum(nums)
// k
ifsum(nums)
% k :
return
false
nums.sort(reverse=
true
)print
(nums)
if nums[0]
> target:
return
false
defdfs
(remain, total)
:if total == target:
iflen
(remain)==0
:return
true
return dfs(remain,0)
for i, n in
enumerate
(remain):if
(total + n)
<= target and dfs(remain[
:i]+remain[i+1:
], total+n)
:return
true
return
false
return dfs(nums,
0)
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...
leetcode 698 劃分為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 k len nums 16 0 nums...
698 劃分為k個相等的子集 python
給定乙個整數陣列 nums 和乙個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。示例 1 輸入 nums 4,3,2,3,5,2,1 k 4 輸出 true 說明 有可能將其分成 4 個子集 5 1,4 2,3 2,3 等於總和。注意 1 k len nums 16 0 n...