給定一組不含重複元素的整數數組 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
算法夢想家,來跟我一塊兒玩算法,玩音樂,聊聊文學創做,我們一塊兒天馬行空!閉包