申明:本文只用做自己的学习记录
题目
一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)
解集 不能 包含重复的子集,按 任意顺序 返回解集
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
代码
func subsets(nums []int) [][]int {
//初始化变量值
results := [][]int{}
temp := []int{}
start := 0
//列出特殊情况
if nums == nil || len(nums) == 0 {
return results
}
BackTrack(start, nums, temp, &results)
return results
}
func BackTrack(start int, nums []int, temp []int, results *[][]int) {
//这里无需设置条件,只要把遍历结果装进切片里就好了
//只要遍历就都要装进结果列表里
current := make([]int, len(temp))
copy(current, temp)
*results = append(*results, current)
//进行循环
for i := start; i < len(nums); i++ {
//进行元素添加
temp = append(temp, nums[i])
//回溯函数
BackTrack(i+1, nums, temp, results)
//恢复到之前的状态
temp = temp[:len(temp)-1]
}
}