Skip to content

Improve comments in SumOfSubset.java #5514

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Oct 5, 2024
Original file line number Diff line number Diff line change
@@ -1,18 +1,52 @@
package com.thealgorithms.dynamicprogramming;

/**
* A utility class that contains the Sum of Subset problem solution using
* recursion.
*
* The Sum of Subset problem determines whether a subset of elements from a
* given array sums up to a specific target value.
*
* Wikipedia: https://en.wikipedia.org/wiki/Subset_sum_problem
*/
public final class SumOfSubset {

private SumOfSubset() {
}

/**
* Determines if there exists a subset of elements in the array `arr` that
* adds up to the given `key` value.
*
* @param arr The array of integers.
* @param num The index of the current element being considered.
* @param key The target sum we are trying to achieve.
* @return true if a subset of `arr` adds up to `key`, false otherwise.
*
* This is a recursive solution that checks for two possibilities at
* each step:
* 1. Include the current element in the subset and check if the
* remaining
* elements can sum up to the remaining target.
* 2. Exclude the current element and check if the remaining elements
* can
* sum up to the target without this element.
*/
public static boolean subsetSum(int[] arr, int num, int key) {
// Base case
if (key == 0) {
return true;
return true; // subset sum found
}
if (num < 0 || key < 0) {
return false;
return false; // no more elements to consider or key is negative
}

// Recursive case

// Pick the current element and include it in the subset
boolean include = subsetSum(arr, num - 1, key - arr[num]);

// Don't pick the current element and exclude it from the subset
boolean exclude = subsetSum(arr, num - 1, key);

return include || exclude;
Expand Down