给定一个非空的正整数数组 nums ,请判断能否将这些数字分成元素和相等的两部分。
示例 1:
输入:nums = [1,5,11,5]
输出:true
解释:nums 可以分割成 [1, 5, 5] 和 [11] 。
示例 2:
输入:nums = [1,2,3,5]
输出:false
解释:nums 不可以分为和相等的两部分
提示:
1 <= nums.length <= 200
1 <= nums[i] <= 100
java代码:
class Solution {
public boolean canPartition(int[] nums) {
//背包
int n = nums.length;
if(n < 1) {
return false;
}
int totalSum =0;
for(int x:nums) {
totalSum +=x;
}
if(totalSum % 2 ==1) {
return false;
}
int target = totalSum /2;
boolean[] dp = new boolean[target +1];
dp[0] = true;
for(int r=0; r<n; r++) {
int y = nums[r];
for(int t = target; t>y-1;t--) {
int x = t-y;
if(dp[x] == true) {
dp[t] = true;
}
}
}
return dp[target];
}
}