testcomb.go 954 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. result := out([]string{"1","2","3","4","5","6"})
  7. fmt.Println(result)
  8. fmt.Println("total :", len(result))
  9. fmt.Println("should :", 6*5*4*3*2 )
  10. //fmt.Println("should :", 6*5*4*3*2 + 5*4*3*2 + 4*3*2 + 3*2 + 2)
  11. }
  12. func compbine(str []string) []string{
  13. rst := []string{}
  14. for i:=1 ; i<len(str) ; i++ {
  15. sub := out(str[:i])
  16. rst = append(rst, sub...)
  17. }
  18. return rst
  19. }
  20. func out(str []string) []string {
  21. length := len(str)
  22. if length == 1 {
  23. return []string{str[0]}
  24. }
  25. return insert(out(str[:length-1]), str[length-1])
  26. }
  27. func insert(res []string, num string) []string {
  28. result := make([]string, len(res)*(len(res[0])+1))
  29. index := 0
  30. for _, v := range res {
  31. for i := 0; i < len(v); i++ {
  32. result[index] = v[:i] + num + v[i:]
  33. index++
  34. }
  35. result[index] = v + num
  36. index++
  37. }
  38. return result
  39. }