子集

题目描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]

解题思路

递归

直接遍历数组,遇到一个数就把所有子集加上该数组成新的子集,遍历完毕即是所有子集。

注意⚠️ 别忘了空集[]也是子集,所以我们需要首先添加一个空集。

//go
func subsets(nums []int) [][]int {
 arr := make([][]int, 0)          // 记录结果
 arr = append(arr, []int{})       // 首先添加空集
 for i := 0; i < len(nums); i++ { // 遍历数组
  tempArr := make([][]int, 0) // 临时存储
  for _, c := range arr {     // 遍历已有子集
   temp := make([]int, 0)          // 临时存储
   temp = append(temp, c...)       // 添加子集
   temp = append(temp, nums[i])    // 添加新元素
   tempArr = append(tempArr, temp) // 添加到临时存储中
  }
  for _, c := range tempArr { // 遍历存入结果
   arr = append(arr, c)
  }
 }
 return arr
}

  地址:https://mp.weixin.qq.com/s/pdNuMA9TAbb9ue3IEeNQPg

posted @ 2020-07-19 19:36  small_lei_it  阅读(503)  评论(0编辑  收藏  举报