首页 > 试题广场 >

字符串的排列

[编程题]字符串的排列
  • 热度指数:5127 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。


输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母,例如ac


输出描述:
[ac, ca]
示例1

输入

acc

输出

[acc, cac, cca]

JavaScript(Node) 😎题目:蘑菇街🍄-字符串全排列无重复(穷举+递归+输出格式(整吐了))

leetcode46、47

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


发表于 2020-02-26 22:29:24 回复(0)