力扣 劃分為k個相等的子集

2021-10-24 17:19:32 字數 1124 閱讀 5422

首先是題意:做每道演算法題,最重要的是,讀懂題意,從分析我們可以得出來的是,目標值及每個子集的和target=sum(nums)/k,所以就確定了目標值target。

得出目標值後,我們可以得到一些一定為false的情況,如

目標值不為整數

nums中有值大於target的

我們還可以先找出nums中是否有等於target的值,

這道題的思路就是把nums所有元素都放進長度為k的groups陣列當中,如果剛剛放完,則返回true。

對於放進groups這個動作我們稱它為搜尋元素放進group,對於一共k個子集的我們只需要乙個for迴圈就能解決。

使用遞迴我們可以做到一直搜尋。只用改變當前搜尋的值,就能一直向group陣列中新增。

如果看不懂思路,請結合**分析。

public

class 劃分為k個相等的子集

; system.out.

println

(a.canpartitionksubsets

(nums,4)

);}public

boolean

canpartitionksubsets

(int

nums,

int k)

return

search

(new

int[k]

, row, nums, target);}

//函式作用:搜尋nums中的每乙個數,能不能新增到groups裡,並且和等於target,row代表當前新增到groups中的數

public

boolean

search

(int

groups,

int row,

int[

] nums,

int target)

//如果遍歷完了,所有數都不能放進groups中,及沒有值相加或者本身等於target,則跳出迴圈break,或者return false;

if(groups[i]==0

)return

false;}

return

false;}

}

力扣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大佬的回溯演算法思想.回...

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...

演算法實踐 劃分為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...