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

2021-09-14 00:10:48 字數 1227 閱讀 7198

給定乙個整數陣列 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[i] < 10000

思路:其實就是將每乙個數都遍歷一遍,然後利用回溯的思想,把不滿足的情況又吐出來

class

solution

:def

canpartitionksubsets

(self, nums: list[

int]

, k:

int)

->

bool

:if k==1:

return

true

sumnum=

sum(nums)

if sumnum%k!=0:

return

false

per=sumnum/k

nums.sort(reverse=

true

) n=

len(nums)

if nreturn fasle

visited=

set(

)def

dfs(k,tmp_sum,loc)

:if tmp_sum==per:

return dfs(k-1,

0,0)

if k==1:

return

true

for i in

range

(loc,n)

:if i not

in visited and nums[i]

+tmp_sum<=per:

visited.add(i)

if dfs(k,tmp_sum+nums[i]

,i+1):

#這一行**其實就是滿足相等情況就繼續往下搜

return

true

visited.remove(i)

#不滿足就把i去掉重新搜

return

false

return dfs(k,0,

0)

(DFS)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 n...

力扣698 劃分為k個相等的子集 回溯演算法

給定乙個整數陣列 nums 和乙個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。示例 輸入 nums 4,3,2,3,5,2,1 k 4 輸出 true 說明 有可能將其分成 4 個子集 5 1,4 2,3 2,3 等於總和。引用labuladong大佬的回溯演算法思想.回...

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

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