给定一组不含重复元素的整数数组 nums,返回该数组全部可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例:程序员
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
复制代码
分享这道题的缘由是他能够递归又能够循环~ 非是小弟不堪言,实乃代码才是天~算法
func subsets(nums []int) [][]int {
re := [][]int{}
//go的闭包很好玩,能够不用传不少变量了~
var dfs func(j int, r []int) dfs = func(j int, r []int) {
//这里是须要把切片复制一份,否则可能会被后序操做影响到
tmp := append([]int{},r...)
re = append(re,tmp)
//回溯的标准写法哈哈,感受像套公式同样,可是确实比较好理解
for i := j; i<len(nums); i++ {
dfs(i+1,append(r,nums[i]))
}
}
dfs(0,[]int{})
return re
}
复制代码
这个方法是借鉴了别人分享的~感受思路很清晰。数组
func subsets(nums []int) [][]int {
res := make([][]int, 0)
res = append(res, []int{})
for i := len(nums)-1; i >= 0; i-- {
length := len(res)
for j := 0; j < length; j++ {
tmp := make([]int, 0)
tmp = append(tmp, nums[i])
//这里的...的意思是把切片中的全部元素一个个地添加到tmp中
tmp = append(tmp, res[j]...)
res = append(res, tmp)
}
}
return res
}
复制代码
好了,今天的题目虽然比较简单,可是咱们能够发现其中蕴含着的智慧。再次呼吁你们一块儿来作作算法题,不必定是程序员哦,各行各业均可以来玩玩,真的很锻炼思惟的。bash
算法梦想家,来跟我一块儿玩算法,玩音乐,聊聊文学创做,我们一块儿天马行空!闭包