function nextLexInPlace(arr) {
let i, a = -1, b = -1;
for( i = 0; i < arr.length-1; i++) if(arr[i] < arr[1+i]) a = i;
if( !~a) return; // no more permutations
for( i = a + 1; i < arr.length; i++) if(arr[a] < arr[i]) b = i;
swap(arr, a, b);
a++;
b = arr.length - 1;
while( a < b) swap(arr, a++, b--);
return true;
}
function swap( arr, a, b) {
let xx = arr[a];
arr[a] = arr[b];
arr[b] = xx;
}
function allMutations( source ) {
let result = [], arr = Array.from(String(source)).slice();
result.push( arr.sort().slice());
while( nextLexInPlace(arr)) result.push(arr.slice());
return result.join('..').replace(/,/g,'')
}
console.log(allMutations(112))
console.log(allMutations(1112))
console.log(allMutations(11122))
Решение:
Как составить все возможные комбинации? Сергей Соколов
Чуть-чуть видоизменил под конкретную ситуацию