Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
Note:
- Each of the array element will not exceed 100.
- The array size will not exceed 200.
Example 1:
Input: [1, 5, 11, 5] Output: true Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5] Output: false Explanation: The array cannot be partitioned into equal sum subsets.
class Solution {
//考虑的情况不周到
public int sum(int[] nums,int start,int end){
int sum=0;
for(int i=start;i<end+1;i++){
sum=sum+nums[i];
}
return sum;
}
public boolean canPartition(int[] nums) {
int sum=sum(nums,0,nums.length-1);
if(sum%2==1) return false;
int target=sum/2;
boolean[] dp=new boolean[target+1];
Arrays.fill(dp,false);
//dp[i] 表示是否存在nums的子集,使得其和为i
dp[0]=true;
for(int i=0;i<nums.length;i++){
for(int j=target;j>=nums[i];j--){
dp[j]=dp[j]||dp[j-nums[i]];
}
}
return dp[target];
}
}