Skip to main content

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 <= 200
  • 1 <= 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;
}