javascript - 没有 sort() 的组合算法

标签 javascript sorting recursion combinations

我需要从 123 开始的结果,如下所示。我想在没有 sort() 的情况下从头开始打印。

1 2 3
1 2 4
1 2 5
.....
3 5 6
4 5 6

但是,结果如下所示。

4 5 6
3 5 6
2 5 6
1 5 6
3 4 6
2 4 6
1 4 6
2 3 6
1 3 6
1 2 6
3 4 5
2 4 5
1 4 5
2 3 5
1 3 5
1 2 5
2 3 4
1 3 4
1 2 4
1 2 3

result = "";
var N = 6;
var M = 3;
var arr = new Array(M);
combi(N, M, arr, M);
alert(result);

function combi(n, r, arr, sz) {
    var i = n + 1;
    while (i-- > r) {
        // choose the first element 
        arr[r - 1] = i;
        if (r > 1) { // if still needs to choose 
            // recursive into smaller problem 
            combi(i - 1, r - 1, arr, sz);
        } else {
            // print out one solution 
            var j = -1;
            while (++j < sz) {
                result += arr[j] + " ";
            }
            result += "\n";
        }
    }
}

最佳答案

除了所有的反转,你可以从一个开始并迭代直到想要的值。

function combination(n, r) {

    function iter(i, temp) {
        if (temp.length === r) {           // set complete
            result.push(temp.join(' '));   // join values
            return;
        }
        if (i + r > n + 1 + temp.length) { // exit early 
            return;
        }
        iter(i + 1, temp.concat(i));       // take the value
        iter(i + 1, temp);                 // go without the value
    }

    var result = [];                       // result set
    iter(1, []);                           // start with 1 and
    return result;                         // empty array for collecting sets
}

console.log(combination(6, 3));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 没有 sort() 的组合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078615/

相关文章:

php - 对返回新数组的 php 数组进行排序

c - 按指针在 C 中指向的值对指针进行排序

java - Java 中的字符数组迭代 - 改进算法

ubuntu - 使用终端确定具有子树的树的总大小(以 Kb 为单位)

Javascript:decodeURIComponent 拒绝工作

javascript - 当组件是 fragment view 时添加 props 和 transition

javascript - Angular js map 调用: url failed to load webpage the url can't be shown

Javascript条件动态表单不输入字段

java - 我如何在 Java 中更正此 switch case?

c - 'smart' 是如何进行 GCC 的 Tail-Call-Optimisation 的?