字符串的排列
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
问题分析:
固定一个值与其他值交换位置顺序,然后将生成的字符串放入res,放入时判断有无重复
注意:
两次代码中的swap交换:第一次:可以看成abc->abc;第二次:abc->bac
可以去按照过程思考一下交换流程
代码展示:
function Permutation(str)
{
// a:b/c,b:a/c,c:a/b
//固定i个值与其他值交换位置顺序,然后将生成的字符串放入res,放入时判断有无重复
if (str === '') return []
let arr = str.split('')
let res = []
Help(arr, 0)
return res.sort()
function Help(arr, i) {
if (i === arr.length-1) {
if (!res.includes(arr.join(''))) {
res.push(arr.join(''))
return
}
}
for(let j = i; j < arr.length; j++) {
swap(arr, i, j)
Help(arr, i+1)
swap(arr, i, j)
}
}
function swap (arr, i, j) {
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}