给定一个字符串,输出该字符串所有排列的可能。如输入“abc”,输出“abc,acb,bca,bac,cab,cba”。
实现过程
输入字符串,输出所有的组合,对js来说,用数组表示最恰当了 即:
function fullpermutate(str) {
var result = [];
return result;
}
复制代码
然后,用递归的形式解决。
基础情况应该是输入字符串为单个字符时的情况,此时返回的就是其本身,但不要忘记用数组的形式返回哦;
function fullpermutate(str) {
var result = [];
if (str.length > 1) {
//do something
} else if (str.length == 1) {
result.push(str);
}
return result;
}
复制代码
接下来,遍历字符串的每一个元素,并将字符串中除了该元素的其他元素进行全排列,如'abc',拿到a后,将bc再次进行全排列,返回的排列好的数组每一项再与a组合在一起得到最终的abc、acb;
function fullpermutate(str) {
var result = [];
if (str.length > 1) {
//遍历每一项
for (var m = 0; m < str.length; m++) {
//拿到当前的元素
var left = str[m];
//除当前元素的其他元素组合
var rest = str.slice(0, m) + str.slice(m + 1, str.length);
//上一次递归返回的全排列
var preResult = fullpermutate(rest);
//组合在一起
for (var i = 0; i < preResult.length; i++) {
var tmp = left + preResult[i]
result.push(tmp);
}
}
} else if (str.length == 1) {
result.push(str);
}
return result;
}
复制代码