fork download
  1.  
  2. # @return c(a[1], ..., a[i], b, a[i+1], ...)
  3. insert <- function(a, b, i) {
  4. if (i == 0) {
  5. return(c(b,a))
  6. } else if (i == length(a)) {
  7. return(c(a,b))
  8. } else {
  9. return( c(a[1:i], b, a[(i+1):length(a)]) )
  10. }
  11. }
  12.  
  13. # @return 一個list物件, 包含所有1,2,...,n的組合
  14. permutation <- function(n) {
  15. retval <- list()
  16. if (n==1) {
  17. retval[[1]] <- 1
  18. return(retval)
  19. }
  20. temp <- permutation(n-1)
  21. retval <- rep(temp, n)
  22. index <- 1
  23. for(i in 0:(n-1)) {
  24. for(j in 1:length(temp)) {
  25. retval[[index]] <- insert(retval[[index]], n, i)
  26. index <- index + 1
  27. }
  28. }
  29. return(retval)
  30. }
  31.  
  32. permutation(4)
Success #stdin #stdout 0.46s 22824KB
stdin
Standard input is empty
stdout
[[1]]
[1] 4 3 2 1

[[2]]
[1] 4 3 1 2

[[3]]
[1] 4 2 3 1

[[4]]
[1] 4 1 3 2

[[5]]
[1] 4 2 1 3

[[6]]
[1] 4 1 2 3

[[7]]
[1] 3 4 2 1

[[8]]
[1] 3 4 1 2

[[9]]
[1] 2 4 3 1

[[10]]
[1] 1 4 3 2

[[11]]
[1] 2 4 1 3

[[12]]
[1] 1 4 2 3

[[13]]
[1] 3 2 4 1

[[14]]
[1] 3 1 4 2

[[15]]
[1] 2 3 4 1

[[16]]
[1] 1 3 4 2

[[17]]
[1] 2 1 4 3

[[18]]
[1] 1 2 4 3

[[19]]
[1] 3 2 1 4

[[20]]
[1] 3 1 2 4

[[21]]
[1] 2 3 1 4

[[22]]
[1] 1 3 2 4

[[23]]
[1] 2 1 3 4

[[24]]
[1] 1 2 3 4