JavaScript
JavaScript copied to clipboard
feat: added SubsetSum algo and its tests in Recursive Algos
Describe your change:
- [x] Add an algorithm? Added SubsetSum algorithm and its tests in Recursive Alogrithms.
/**
* @function subsetSum
* @description This function recursively calculates the count of subsets whose sum equals the given target sum.
* @param {number[]} arr - The input array of numbers.
* @param {number} sum - The target sum we want to find in the subsets.
* @param {number} ind - The current index.
* @return {number} The count of subsets whose sum equals the target sum.
*
*/
export function subsetSum(arr, sum, ind = 0) {
//input validation only in the inital call
if (
ind === 0 &&
(!Array.isArray(arr) || !arr.every((elem) => typeof elem === 'number'))
) {
throw new TypeError('arr should be an array of numbers')
}
if (ind === 0 && typeof sum !== 'number') {
throw new TypeError('sum should be a number')
}
if (ind === arr.length) {
return sum === 0 ? 1 : 0
}
return subsetSum(arr, sum, ind + 1) + subsetSum(arr, sum - arr[ind], ind + 1)
}
Checklist:
- [x] I have read CONTRIBUTING.md.
- [x] This pull request is all my own work -- I have not plagiarized.
- [x] I know that pull requests will not be merged if they fail the automated tests.
- [x] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
- [x] All new JavaScript files are placed inside an existing directory.
- [x] All filenames should use the UpperCamelCase (PascalCase) style. There should be no spaces in filenames.
Example:
UserProfile.jsis allowed butuserprofile.js,Userprofile.js,user-Profile.js,userProfile.jsare not - [x] All new algorithms have a URL in their comments that points to Wikipedia or another similar explanation.
- [x] If this pull request resolves one or more open issues then the commit message contains
Fixes: #{$ISSUE_NO}.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 84.81%. Comparing base (
ff314a2) to head (5426682). Report is 1 commits behind head on master.
Additional details and impacted files
@@ Coverage Diff @@
## master #1734 +/- ##
==========================================
+ Coverage 84.76% 84.81% +0.04%
==========================================
Files 378 379 +1
Lines 19742 19799 +57
Branches 2955 2967 +12
==========================================
+ Hits 16735 16792 +57
Misses 3007 3007
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
@appgurueu kindly see if this should be added to recursive algorithms
@appgurueu @raklaptudirm Can you check this and let me know if this can be added to Recursive Algorithms?