anagrams - 颠倒字母顺序重新排列组合

优质
小牛编辑
130浏览
2023-12-01

⚠️ 警告: 这个函数的执行时间随着每个字符呈指数级增长。 超过8到10个字符的任何内容都会导致浏览器挂起,因为它试图解决所有不同的组合。

生成一个颠倒字母顺序的字符串,返回一个排列组合数组(包含重复)。

使用递归。 颠倒给定字符串中的每个字母,创建所有排列组合数组。 使用 Array.map() 将字母与每个部分字母组合在一起,然后使用 Array.reduce() 将所有字母组合到一个数组中。 基本情况是字符串 length 等于 21

const anagrams = str => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
  return str
    .split('')
    .reduce(
      (acc, letter, i) =>
        acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)),
      []
    );
};
anagrams('abc'); // ['abc','acb','bac','bca','cab','cba']