【题目】

输入一个字符串,按字典序打印出该字符串中字符的所有排列

【示例】

输入字符串abc,则打印出a,b,c所能排列出的所有字符串abc,acb,bac,bca,cab,cba

【思路】

回溯法
一条道走到黑完了再退回一步,再走到黑,然后再退回一步,然后退回两步,循环进行
时间复杂度是 O(n!)
深度优先搜索

【解法】

  1. var permutation = function (s) {
  2. const res = new Set();
  3. const visit = {};
  4. function dfs(path) {
  5. if (path.length === s.length) return res.add(path);
  6. for (let i = 0; i < s.length; i++) {
  7. if (visit[i]) { continue; }
  8. visit[i] = true;
  9. dfs(path + s[i]);
  10. visit[i] = false;
  11. }
  12. }
  13. dfs('');
  14. return [...res];
  15. }