经典指数          
原因
8048
浏览数
0
收藏数
 

任意给定英文单词,输出该单词中字母的所有可能排列组合,且不能出现重复。例如:输入eat,则所有排列为6个:eta,act,tea,ate,tae,eat,需要注意的是单词中可能存在重复字母。例如:输入see,则所有可能排列只是3个:see,ese,ees。

1)描述思路(2分)

2)请用你熟悉的编程语言编码实现(8分)

     举报   纠错  
 
切换
1 个答案


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;
}


 
切换
撰写答案
扫描后移动端查看本题