Partition Equal Subset Sum
Problem statement
Given a non-empty array nums 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.
Example 1:
Input: nums = [1,5,11,5]Output: trueExplanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: nums = [1,2,3,5]Output: falseExplanation: The array cannot be partitioned into equal sum subsets.
Constraints:
1 <= nums.length <= 2001 <= nums[i] <= 100
My solution
/**
* @param {number[]} nums
* @return {boolean}
*/
var canPartition = function(nums) {
let sum = nums.reduce((acc, curr) => acc + curr, 0);
if (sum % 2 === 1) {
return false
}
sum /= 2;
const memo = new Map();
return traverse(nums, sum, 0, memo)
};
function traverse(nums, sum, idx, memo) {
// console.log(memo)
if (sum === 0) {
return true;
}
if (sum < 0 || idx === nums.length) {
return false
}
const key = `${idx}-${sum}`;
// console.log(key)
if (memo.has(key)) {
return memo.get(key)
}
let result = traverse(nums, sum - nums[idx], idx + 1, memo) || traverse(nums, sum, idx + 1, memo)
memo.set(key, result)
return result;
}