78.go 617 B

1234567891011121314151617181920212223242526272829303132333435
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func combine(nums []int, k int) (res [][]int) {
  6. n := len(nums)
  7. if n == k || k == 0 {
  8. row := make([]int, k)
  9. for i := range row {
  10. row[i] = nums[i]
  11. }
  12. return append(res, row)
  13. }
  14. // C(k)(n) = C(k-1)(n-1) + C(k)(n-1)
  15. for _, row := range combine(nums[:n-1], k-1) {
  16. row = append(row, nums[n-1])
  17. res = append(res, row)
  18. }
  19. res = append(res, combine(nums[:n-1], k)...)
  20. return
  21. }
  22. func subsets(nums []int) (res [][]int) {
  23. for i := 0; i <= len(nums); i++ {
  24. res = append(res, combine(nums, i)...)
  25. }
  26. return
  27. }
  28. func main() {
  29. a1 := []int{1, 2, 3}
  30. fmt.Println(subsets(a1))
  31. }