题目描述

剑指Offer——字符串的排列(JS实现)_i++

解题思路


  • 这道题属于考查DFS(深度优先遍历)
  • 和本道题几乎完全一样的有全排列问题,都是在考查DFS
  • DFS的本质就是递归
  • 本题通过设置一个和字符串长度一致的一维数组,用来表示该元素是否被遍历过,初始值全为false表示都没有被遍历过
  • 当dfs收到的参数的长度和输入s的长度一致时,说明一条路径已经遍历完了,然后开始存储并返回

解题代码

var permutation = function(s) {
const trace = [];
const res = [];
for (let i = 0; i < s.length;i++) {
trace[i] = false;
}
function dfs(str) {
if (str.length === s.length) {
res.push(str);
return;
}
for (let i = 0;i < s.length;i++) {
if (trace[i] === true) continue;
trace[i] = true;
dfs(str + s[i]);
trace[i] = false;
}
}
dfs('');
return [...new Set(res)];
};

实现效果

剑指Offer——字符串的排列(JS实现)_i++_02

总结(本题给我们的启示思路)


  • 启示一:学会使用DFS
  • 启示二:通过设置一个同纬度的布尔值数组来表示该位置的元素是否被遍历过
  • 启示三;学会通过集合对数组重复元素进行去重