1. 程式人生 > 其它 >Leetcode416.分割等和子集

Leetcode416.分割等和子集

Leetcode416.分割等和子集

題目

給你一個 只包含正整數非空 陣列 nums 。請你判斷是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。

用例

輸入:nums = [1,5,11,5]
輸出:true
解釋:陣列可以分割成 [1, 5, 5] 和 [11] 。
輸入:nums = [1,2,3,5]
輸出:false
解釋:陣列不能分割成兩個元素和相等的子集。

求解

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var canPartition = function(nums) {
    let sum = 0
    for(let i=0;i<nums.length;i++){
        sum=sum+nums[i]
    }
    if(sum%2!=0) return false
    let target = sum/2
    let dp= new Array(nums.length+1).fill(0).map(() => new Array(target+1).fill(false))
    console.log(dp.length)
    console.log(dp[0].length)
    for(let i=1;i<dp.length;i++){
        for(let j=1;j<dp[0].length;j++){
            if(nums[i-1]==j){
                dp[i][j]=true
            }else{
                dp[i][j]= dp[i-1][j] || (j-nums[i-1]>=0?dp[i-1][j-nums[i-1]]:false)
            }
            if(dp[i][target]) return true
        }
    }
    console.log(dp)
    return false
};