object PermutationsOfAString {
def permutations(str: String): List[String] = {
def permute(chars: Array[Char], l: Int, r: Int, result: List[String]): List[String] = {
if (l == r) {
(chars.mkString :: result).reverse
} else {
var res = result
for (i <- l to r) {
swap(chars, l, i)
res = permute(chars, l + 1, r, res)
swap(chars, l, i)
}
res
}
}
def swap(chars: Array[Char], i: Int, j: Int): Unit = {
val temp = chars(i)
chars(i) = chars(j)
chars(j) = temp
}
permute(str.toCharArray, 0, str.length - 1, List.empty[String])
}
def main(args: Array[String]): Unit = {
val str = "abc"
val result = permutations(str)
println(result)
}
}
/*
run:
List(cba, bac, abc, acb, bca, cab)
*/