【发布时间】:2015-01-23 00:50:35
【问题描述】:
我正在查看 Pavel 对 Project Euler 问题 24 的解决方案,但不能完全弄清楚这个函数是如何工作的 - 有人可以解释它在做什么吗?其目的是返回数字 0 到 9 的百万分之一字典排列。
def ps(s: String): Seq[String] = if(s.size == 1) Seq(s) else
s.flatMap(c => ps(s.filterNot(_ == c)).map(c +))
val r = ps("0123456789")(999999).toLong
我知道当输入字符串的长度为 1 时,该函数将该字符作为 Seq 返回,然后我认为它会附加到剩下的唯一另一个字符上,但我无法想象如何你到了那一点,或者为什么这会导致一个排列列表。
(我自己已经解决了这个问题,但是使用了permutations方法,这使它成为一个相当简单的1-liner,但希望能够理解上述内容。)
【问题讨论】:
-
请注意,如果原始字符串有重复字符,此功能将不起作用。例如
ps("11")是空的,ps("112")只是{"12", "12"}(甚至没有"21")。
标签: scala permutation