题目描述
题目难度:Medium
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.
AC代码
class Solution {
public boolean canPartition(int[] nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
if (sum % 2 != 0) {
return false;
}
Arrays.sort(nums);
return dfs(nums, sum/2, 0);
}
private boolean dfs(int[] nums, int target, int start) {
if(target == 0)
return true;
for(int i = start; i < nums.length; i++) {
if(target - nums[i] < 0) break;
if(i != start && nums[i] == nums[i-1])
continue;
if(dfs(nums, target - nums[i], i+1))
return true;
}
return false;
}
}