diff --git a/lcci/08.08.Permutation II/README.md b/lcci/08.08.Permutation II/README.md index dacfda61b913b..6d0705237348f 100644 --- a/lcci/08.08.Permutation II/README.md +++ b/lcci/08.08.Permutation II/README.md @@ -48,6 +48,46 @@ ``` +### **JavaScript** + +```js +/** + * @param {string} S + * @return {string[]} + */ +var permutation = function(S) { + let res = []; + let arr = [...S]; + arr.sort(); + let prev = []; + let record = new Array(S.length).fill(false); + dfs(arr, 0, prev, record, res); + return res; +}; + +function dfs(arr, depth, prev, record, res) { + if (depth == arr.length) { + res.push(prev.join('')); + return; + } + for (let i = 0; i < arr.length; i++) { + if (record[i]) { + continue; + } + // 剪枝 + if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) { + continue; + } + prev.push(arr[i]); + record[i] = true; + dfs(arr, depth + 1, prev, record, res); + // 回溯 + prev.pop(); + record[i] = false; + } +} +``` + ### **...** ``` diff --git a/lcci/08.08.Permutation II/README_EN.md b/lcci/08.08.Permutation II/README_EN.md index 86430a473f316..db9a571191d01 100644 --- a/lcci/08.08.Permutation II/README_EN.md +++ b/lcci/08.08.Permutation II/README_EN.md @@ -49,6 +49,46 @@ ``` +### **JavaScript** + +```js +/** + * @param {string} S + * @return {string[]} + */ +var permutation = function(S) { + let res = []; + let arr = [...S]; + arr.sort(); + let prev = []; + let record = new Array(S.length).fill(false); + dfs(arr, 0, prev, record, res); + return res; +}; + +function dfs(arr, depth, prev, record, res) { + if (depth == arr.length) { + res.push(prev.join('')); + return; + } + for (let i = 0; i < arr.length; i++) { + if (record[i]) { + continue; + } + // 剪枝 + if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) { + continue; + } + prev.push(arr[i]); + record[i] = true; + dfs(arr, depth + 1, prev, record, res); + // 回溯 + prev.pop(); + record[i] = false; + } +} +``` + ### **...** ``` diff --git a/lcci/08.08.Permutation II/Solution.js b/lcci/08.08.Permutation II/Solution.js new file mode 100644 index 0000000000000..09cfb38183d51 --- /dev/null +++ b/lcci/08.08.Permutation II/Solution.js @@ -0,0 +1,35 @@ +/** + * @param {string} S + * @return {string[]} + */ + var permutation = function(S) { + let res = []; + let arr = [...S]; + arr.sort(); + let prev = []; + let record = new Array(S.length).fill(false); + dfs(arr, 0, prev, record, res); + return res; +}; + +function dfs(arr, depth, prev, record, res) { + if (depth == arr.length) { + res.push(prev.join('')); + return; + } + for (let i = 0; i < arr.length; i++) { + if (record[i]) { + continue; + } + // 剪枝 + if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) { + continue; + } + prev.push(arr[i]); + record[i] = true; + dfs(arr, depth + 1, prev, record, res); + // 回溯 + prev.pop(); + record[i] = false; + } +} \ No newline at end of file