剑指 Offer 38. 字符串的排列

  1. var permutation = function(s) {
  2. let n = s.length;
  3. if (n <= 1) {
  4. return [s];
  5. }
  6. let ans = [s[0]];
  7. for (let i = 1; i < n; i++) {
  8. ans = ans.map(a => getInserts(a, s[i]));
  9. ans = ans.flat(); // flat 返回新数组
  10. }
  11. // ans 需要去重
  12. return Array.from(new Set(ans));
  13. };
  14. function getInserts(target, intertChar) {
  15. let ans = [];
  16. let n = target.length;
  17. for (let i = 0; i <= n; i++) {
  18. let arr = target.split('');
  19. arr.splice(i, 0, intertChar);
  20. let tmp = arr.join('');
  21. ans.push(tmp);
  22. }
  23. return ans;
  24. }
  25. permutation('ABC');