0078.子集

方法一:回溯

时间复杂度 $O(n \times 2^n)$,空间复杂度 $O(n)$。

func subsets(nums []int) [][]int {
	ans, n := [][]int{}, len(nums)
	var backtrack func(values []int, start int)
	backtrack = func(values []int, start int) {
		ans = append(ans, append([]int{}, values...))
		for i := start; i < n; i++ {
			values = append(values, nums[i])
			backtrack(values, i+1)
			values = values[:len(values)-1]
		}
	}
	backtrack([]int{}, 0)
	return ans
}