我发现了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)]);
}
}
}
答案 0 :(得分:1)
您可以对任意大小的项目使用动态方法,方法是从数组中取出一个元素,获取其余组合,然后将该元素放到数组的前一个位置。
然后获取实际元素并将其添加到结果集中。然后尝试获取rest数组的组合并将其映射到结果集。
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;