因子的Scala排列

时间:2011-02-20 11:41:48

标签: scala

  

可能重复:
  Scala permutation of Factorials

我的问题是我必须对Factorial进行结果排列。 问题:打印出所有n!从(26个字母)开始的n个字母的排列。 n个元素的排列是n中的一个!可能的元素排序。例如,当n = 3时,您应该得到以下输出。例如:abc bac acb cab cba bca

1 个答案:

答案 0 :(得分:4)

在scala 2.9中,有一种称为Seq。

的排列的方法
Welcome to Scala version 2.9.0.r24073-b20110124174250 (Java HotSpot(TM) Client VM, Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.

scala> "abc".permutations foreach println
abc
acb
bac
bca
cab
cba

scala> "abcd".permutations foreach println
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba

scala>

或者自己实施:

scala> def permutations[T](xs: List[T]): List[List[T]] = xs match {
     |     case Nil => List(Nil)
     |     case _   => for(x <- xs;ys <- permutations(xs diff List(x))) yield x::ys
     | }
permutations: [T](xs: List[T])List[List[T]]

scala> permutations("abc".toList) foreach println
List(a, b, c)
List(a, c, b)
List(b, a, c)
List(b, c, a)
List(c, a, b)
List(c, b, a)