求给定数组中 N 个数相加之和为 sum 所有可能集合

本文阅读 1 分钟
首页 知识库 正文

求给定数组中 N 个数相加之和为 sum 所有可能集合,请补充以下代码

  1. function fn(arr, n, sum) {}
  1. function fun(arr, n, sum) {
  2. let result = [];
  3. if (arr.length < n) return -1;
  4. arr.sort((prev, next) => {
  5. return prev - next;
  6. });
  7. function getSum(arr, n, currSum, index, incArr = []) {
  8. for (let i = index; i < arr.length; i++) {
  9. let temp = currSum + arr[i];
  10. if (temp > sum) break;
  11. if (n > 1) {
  12. getSum(arr, n - 1, temp, i + 1, [arr[i], ...incArr]);
  13. }
  14. if (n === 1 && temp === sum) {
  15. result.push([arr[i], ...incArr]);
  16. }
  17. }
  18. }
  19. getSum(arr, n, 0, 0);
  20. return result;
  21. }
  1. function findSumNumbers(array, n, sum) {
  2. // 枚举所有n个数的组合,判断组合的和等于sum
  3. let result = [];
  4. const generateAll = function (index, collection, arr) {
  5. if (collection.length === n) {
  6. const s = collection.reduce((acc, c) => (acc += c), 0);
  7. if (s === sum) {
  8. result.push(collection);
  9. }
  10. return;
  11. }
  12. for (let i = 0; i < arr.length; i++) {
  13. generateAll(index + 1, collection.concat(arr[i]), arr.slice(i + 1));
  14. }
  15. };
  16. generateAll(0, [], array.slice(0));
  17. return result;
  18. }
  19. findSumNumbers([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2, 10);
  20. findSumNumbers([1, 0, -1, 0, -2, 2], 4, 0);
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

如何求数组中的 TOP k
« 上一篇 05-28
求正序增长的正整数数组中,其和为 N 的两个数
下一篇 » 05-28

发表评论

惪特博客
  • 文章总数:
    18498 篇
  • 评论总数:
    53264 条
  • 标签总数:
    8869 个
  • 总浏览量:
    21816992 次
  • 最后更新:
    6天前

最多点赞

随便看看

标签TAG