78.go 604 B

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