词典排列

Dra*_*mes 3 functional-programming scala permutation

我一直在研究Project Euler 问题24并且遇到了Scala的解决方案(无论如何我试图解决它的语言).我原本打算自己做,但现在我发现这个解决方案是如何工作的.

问题:

字典排列0,1和2是:

012,021,102,120,201和210.

数字0,1,2,3,4,5,6,7,8和9的百万次词典排列是多少?

解决方案:

def permutations(s : String) : Seq[String] =
{
  if(s.size == 1)
    Seq(s);
  else
    s.flatMap(x => permutations(s.filterNot(_ == x)).map(x +));
}

val ans = permutations("0123456789")(1000000 - 1).toLong;

println(ans);
Run Code Online (Sandbox Code Playgroud)

fla*_*ian 8

这在Scala中是微不足道的:

"0123456789".permutations.drop(999999).next
Run Code Online (Sandbox Code Playgroud)