| 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))
 
- } */
 
 
  |