子集——DFS

53 阅读1分钟

image.png

方法

  1. 记录cur深度
  2. 每到一层后选择是否加上这个深度的值
  3. 每一层都只有两个选择,带上这个值去下一层或不带上
  4. 将两种选择都记录下来
  5. 在最深处加入ans
func subsets(nums []int) [][]int {
    ans := make([][]int, 0)
    var res []int
    var dfs func(int)
    dfs = func (cur int) {
        if cur == len(nums) {
            // temp := make([]int,len(res))
            // copy(temp, res)
            ans = append(ans,append([]int{},res...))
            return
        }
        res = append(res, nums[cur])
        dfs(cur+1)
        res = res[:len(res)-1]
        dfs(cur+1)
    }
    dfs(0)
    return ans
}