任意给定英文单词,输出该单词中字母的所有可能排列组合,且不能出现重复。例如:输入eat,则所有排列为6个:eta,act,tea,ate,tae,eat,需要注意的是单词中可能存在重复字母。例如:输入see,则所有可能排列只是3个:see,ese,ees。
1)描述思路(2分)
2)请用你熟悉的编程语言编码实现(8分)
function carry(str) {
var result = [];
var arr = str.split('');
function run(arr,temp,deep) {
for(var i = 0,len = arr.length;i < len; i++) {
temp.length = deep
temp.push(arr[i])
if( len === 1) {
result.push(temp.join(''));
}
var left = [].concat(arr);
left.splice(i,1);
run(left,temp,deep + 1);
}
}
run(arr,[],0);
result = heavy(result);
return result;
}
carry('see');
function heavy(result) {
var obj = {};
var newResult = [];
for(var i = 0; i < result.length; i++) {
if(!obj[result[i]]) {
obj[result[i]] = 1;
} else {
obj[result[i]] += 1;
}
if(obj[result[i]] == 1) {
newResult.push(result[i]);
}
}
return newResult;
}