赞
踩
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
'abc'
=>'a' + 'bc' => 'a' + 'b' + 'c' || 'a' + 'c' + 'b'
=>'b' + 'ac' => 'b' + 'a' + 'c' || 'b' + 'c' + 'a'
=>'c' + 'ab' => 'c' + 'a' + 'b' || 'c' + 'b' + 'a'
function Permutation(str) { // 所有结果集合 let result = []; // 如果输入空字符串,则返回空数组 if (str.length == 0) return []; // 如果输入一个字符,则返回数组,内容唯一且为输入字符 if (str.length == 1) return [str]; // 遍历字符串 for (let i = 0; i < str.length; i++) { // 字符串第n项 let item = str[i]; // 字符串除第n项外其余项 let reStr = str.slice(0, i) + str.slice(i + 1, str.length); // 对剩余项进行排列后的所有集合 let remaining = Permutation(ReStr); // 遍历对剩余项进行排列后的所有集合 for (let j = 0; j < remaining.length; j++) { // 字符串第n项与剩余项进行排列后的所有集合中第j项进行拼接 let tmp = item + remaining[j]; // 如果集合中不存在此项,则将此项扔进数组(去重) if(result.indexOf(tmp)==-1) result.push(tmp); } } return result; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。