2
public boolean canPartition(int[] nums) {4
for (int i = 0; i < nums.length; i++) {11
int[][] dp = new int[nums.length + 1][sum];12
for (int i = 0; i < dp.length; i++) {13
Arrays.fill(dp[i], -1);16
return helper(nums, sum / 2, 0, dp) >= 1 ? true : false;19
public int helper(int[] nums, int sum, int i, int[][] dp) {20
if (i == nums.length && sum == 0) {23
if (i == nums.length) {29
if (dp[i][sum] != -1) {33
return dp[i][sum] = helper(nums, sum, i + 1, dp);35
int a = helper(nums, sum - nums[i], i + 1, dp); // Take the value36
int b = helper(nums, sum, i + 1, dp); // Not take the value38
|| b == 1) { // if any of the options is returning true then whole answer would be true39
return dp[i][sum] = 1;41
return dp[i][sum] = 0;