当前位置: 首页 > 知识库问答 >
问题:

在一个序列中求和到n的m个数

干永丰
2023-03-14

给定一个从1到n的序列,我想找到所有大小为m的唯一子序列,求和到n。子序列不需要是连续的。例如

if m = 2, n = 5
The possible unique subsequences of size 2 are {1,4} and {2,3}

到目前为止,我已经能够使用递归生成所有的子序列,但我的代码并不是只返回唯一的子序列,结果中有一些重复的子序列。

function allCombinations(m, n) {
if (m < 1) {
    return [];
}

let helper = function(m, n, arr, result, index){
    if (n < 0 || m < 0) {
        return 0;
    }

    if (m === 0 && n === 0) {
        result.push(arr.slice());
        return 1;
    }

    for (let i = index; i <= n; i++){
        arr.push(i);
        helper(m - 1, n - i, arr, result, index + 1);
        arr.pop();
    }

}

let result = [];
helper(m, n, [], result, 0);

return result;
}

当用

let res = allCombinations(2, 5);

结果是

[ [ 1, 4 ], [ 2, 3 ], [ 3, 2 ] ]

正如您所看到的,{3,2}是{2,3}的副本。我如何改变我的代码,使它只返回唯一的序列?

共有1个答案

方和宜
2023-03-14
for (let i = index; i <= n; i++){
    arr.push(i);
    helper(m - 1, n - i, arr, result, i + 1);
    arr.pop();
}

这将产生唯一的序列,其中元素按升序排序。如果只使用i调用它,则允许重复选择。

更改此选项将允许零作为选择,除非从包装函数调用索引为1的帮助器:

let result = [];
helper(m, n, [], result, 1);
 类似资料:
  • 我想在java中创建一个方法,该方法接收两个字符串列表:

  • IntStream可能是最简单的方法,但我只能获取最小的M数字,如下所示: 顺便说一句,考虑算法复杂性并假设N 我认为最好的复杂性可能达到O(N log(M)),但我不知道Java 8是否有这种流方法或收集器。

  • 本文向大家介绍前n个自然数求和的Java程序,包括了前n个自然数求和的Java程序的使用技巧和注意事项,需要的朋友参考一下 以下是Java代码到前n个自然数的和– 示例 输出结果  名为Demo的类定义了一个静态函数,该函数以值作为参数。这里,初始和定义为0。接下来,“for”循环在值1上运行到作为参数传递的值。这是从1开始的数的立方体需要计算到的值。接下来,将每个元素的值乘以三次并返回。接下来,

  • 这个问题以前也有人问过,但我从来没有真正看到过好的答案。 > 我想生成8个和为0.5的随机数。 我希望每个数字都是从一个均匀分布中随机选择的(即下面的简单函数将不起作用,因为数字将不是均匀分布的)。 代码应该是可推广的,这样您就可以生成N个和M(其中M是正浮点)的均匀随机数。如果可能的话,能否也请你解释一下(或用一个图表示)为什么你的解会在适当的范围内均匀地产生随机数? 失手的相关问题: 在pyt

  • 本文向大家介绍写一个方法,计算有N个数(可重复),分别放到M个位置中,有多少种排列?相关面试题,主要包含被问及写一个方法,计算有N个数(可重复),分别放到M个位置中,有多少种排列?时的应答技巧和注意事项,需要的朋友参考一下

  • 我明天有一个计算机科学期中考试,我需要帮助确定一个特定递归函数的复杂性,如下所示,这比我已经研究过的东西要复杂得多:它有两个变量 T(n)=3 mT(n-m) 在m为常数的简单情况下,可以通过编写解包关系轻松获得公式;然而,在这种情况下,拆包并不会使生活变得更容易,如下所示(假设t(0)=c): T(n)=3 mT(n-m) T(n-1)=3 mT(n-m-1) T(n-2)=3 mT(n-m-2