12345678910111213141516171819202122232425262728293031 |
- package main
- func combine(nums []int, k int) (res [][]int) {
- n := len(nums)
- if n == k || k == 0 {
- row := make([]int, k)
- for i := range row {
- row[i] = nums[i]
- }
- return append(res, row)
- }
- // C(k)(n) = C(k-1)(n-1) + C(k)(n-1)
- for _, row := range combine(nums[:n-1], k-1) {
- row = append(row, nums[n-1])
- res = append(res, row)
- }
- res = append(res, combine(nums[:n-1], k)...)
- return
- }
- func subsets(nums []int) (res [][]int) {
- for i := 0; i <= len(nums); i++ {
- res = append(res, combine(nums, i)...)
- }
- return
- }
- /* func main() {
- a1 := []int{1, 2, 3}
- fmt.Println(subsets(a1))
- } */
|