Leetcode - Partition Equal Subset Sum
My code:
public class Solution {
public boolean canPartition(int[] nums) {
if (nums.length == 0) {
return true;
}
int sum = 0;
for (int num : nums) {
sum += num;
}
if (sum % 2 != 0) {
return false;
}
sum = sum / 2;
boolean[] dp = new boolean[sum + 1];
dp[0] = true;
for (int i = 1; i <= nums.length; i++) {
for (int j = sum; j >= nums[i - 1]; j--) {
dp[j] |= dp[j - nums[i - 1]];
}
}
return dp[sum];
}
}
首先,sum of total array should be even
其次,如果存在這麼一種partition,那麼,每個partition的和,一定是 sum / 2
然後,我們就可以用一種類似於 subset的方法,來求出,是否存在那麼一組partition,他們的和是 sum / 2, 如果存在,一定還會有另外一組partition與之對應,和也是 sum / 2
所以用dp來解決這個問題。
然後我們的目的就是 sum / 2
所以他就是上限,任何 > sum / 2的序列,我們不感興趣
一開始我們放入 nums[0]
然後是
nums[0], nums[1], nums[0] + nums[1] (assume they are all <= sum / 2)
nums[0], nums[1], nums[0] + nums[1], nums[2], nums[0] + nums[2]
nums[1] + nums[2], nums[0] + nums[1] + nums[2]
....
最後,我們需要求得, dp[sum / 2] 是否為 true
Anyway, Good luck, Richardo! -- 10/13/2016
相關文章
- [LeetCode] 416. Partition Equal Subset SumLeetCode
- 【LeetCode】416. Partition Equal Subset Sum 解題報告(Python & C++)LeetCodePythonC++
- Subset leetcode javaLeetCodeJava
- Subset II leetcode javaLeetCodeJava
- Leetcode - Largest Divisible SubsetLeetCode
- LeetCode-Largest Divisble SubsetLeetCode
- Leetcode Path SumLeetCode
- leetcode Sum系列LeetCode
- Leetcode Two SumLeetCode
- leetcode15&16_3Sum&4SumLeetCode
- Leetcode Partition ListLeetCode
- leetcode 368. Largest Divisible SubsetLeetCode
- Leetcode 1 two sumLeetCode
- Leetcode 3SumLeetCode
- Leetcode 4SumLeetCode
- Leetcode Path Sum IILeetCode
- Leetcode-Path SumLeetCode
- Leetcode-Two SumLeetCode
- Leetcode-3SumLeetCode
- Path Sum leetcode javaLeetCodeJava
- Two Sum leetcode javaLeetCodeJava
- 3 Sum leetcode javaLeetCodeJava
- 4 Sum leetcode javaLeetCodeJava
- Leetcode-Partition ListLeetCode
- Partition List leetcode javaLeetCodeJava
- [LeetCode]1.Two SumLeetCode
- Leetcode 15 3SumLeetCode
- Leetcode 18 4SumLeetCode
- LeetCode----1. Two SumLeetCode
- LeetCode-3Sum SmallerLeetCode
- LeetCode-Count of Range SumLeetCode
- LeetCode1:Two SumLeetCode
- Leetcode 3Sum ClosestLeetCode
- Leetcode Sum Root to Leaf NumbersLeetCode
- Leetcode Minimum Path SumLeetCode
- Leetcode-Path Sum IILeetCode
- Leetcode-3Sum ClosestLeetCode
- Path Sum II leetcode javaLeetCodeJava