Javascript练习:每个可能的选项

时间:2017-08-23 19:01:45

标签: javascript

我发现了exercise

但我不喜欢它,因为它没有考虑给定输入的所有可能性。所以,我试图用更多的可能性来扩展答案。所以这就是挑战:

给定任何字符串或数字,返回每个可能的组合。 例如:123

输出将是: 1,12,13,123,132,2,21,23,213,231,3,31,32,312,321。

没有重复的项目,如11,111,112等

到目前为止我的代码(温柔。; p)

let n = 123 + '';
let x = n.split('');
let answer = [];

for (let i = 0; i < x.length; i++){
    answer.push( x[i] );
    if ( i === 0) {
        for (let a = 0; a < x.length - 1; a++){
            answer.push( x[i] + '' + x[i + (a + 1)]);   
        }
    }
    else if ( i > 0 && i !== (x.length - 1) ){
        for (let a = 0; a < i; a++){
            answer.push( x[i] + '' + x[a]);
        }
        for (let a = i + 1; a < x.length; a++){
            answer.push( x[i] + '' + x[a]);
        }
    }
    else if (i === (x.length - 1)) {

        for (let a = x.length; a > 1; a--){
            answer.push( x[i] + '' + x[i - (a - 1)]);   
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以对任意大小的项目使用动态方法,方法是从数组中取出一个元素,获取其余组合,然后将该元素放到数组的前一个位置。

然后获取实际元素并将其添加到结果集中。然后尝试获取rest数组的组合并将其映射到结果集。

&#13;
&#13;
function x(array) {
    var i, l, element, temp, result = [];
    for (i = 0, l = array.length; i < l; i++) {
        element = array.splice(i, 1);
        result.push(element)
        temp = x(array);
        if (temp.length) {
            result = result.concat(temp.map(a => element.concat(a)));
        }
        array.splice(i, 0, element[0]);
    }
return result;
}

console.log(x([...'123']));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;