?? 警告: 这个函数的执行时间随着每个字符呈指数级增长。 超过8到10个字符的任何内容都会导致浏览器挂起,因为它试图解决所有不同的组合。
生成一个颠倒字母顺序的字符串,返回一个排列组合数组(包含重复)。
使用递归。 颠倒给定字符串中的每个字母,创建所有排列组合数组。 使用 Array.map()
将字母与每个部分字母组合在一起,然后使用 Array.reduce()
将所有字母组合到一个数组中。 基本情况是字符串 length
等于 2
或 1
。
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']
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂