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
};
posted @ 2021-12-21 15:49  BONiii  阅读(25)  评论(0)    收藏  举报