1
var canPartition = function (nums) {2
let sum = nums.reduce((prevVal, currValue) => prevVal + currValue, 0); // sum of each values3
if (sum % 2 !== 0) return false; // return false if odd sum5
let target = sum / 2; // ex.[1,5,11,5] target is half which is 116
let dp = new Set(); // add unique values7
dp.add(0); //intialize with 08
for (var i = nums.length - 1; i >= 0; i--) {11
for (const ele of dp.values()) {12
let newVal = ele + nums[i];13
if (newVal === target) return true;16
dp = new Set([...dp, ...nextDp]);