输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
if(!line) return
inArr.push(line.trim())
if(inArr.length === 1){
let arr = inArr[0].split('')
let res = permuteUnique(arr).map(e=>e.join(''))
res.sort()
let str = ''
for (let i = 0; i < res.length; i++) {
if(i==0){
str += '['+res[i] +', '
}else if(i==res.length-1){
str += res[i] +']'
}else{
str += res[i]+', '
}
}
console.log(str)
}
})
var permuteUnique = function(nums) {
if (nums.length === 0) {
return [];
}
if (nums.length === 1) {
return [nums];
}
let [num, ...restNums] = nums;
let resArr=permuteUnique(restNums).reduce((res, iter) => {
let iterRes = [];
for (let i = 0; i <= iter.length; i++) {
let tmp = [...iter];
tmp.splice(i, 0, num);
iterRes.push(tmp);
}
return res.concat(iterRes);
}, []);
let res={}
resArr.forEach(item=>{
res[item]=item;
});
return Object.values(res)
};