-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
39 lines (32 loc) · 826 Bytes
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main
import "fmt"
var (
res = make([][]int, 0) // 存放最终结果
path = make([]int, 0) // 存放中间结果
)
func backtracking(nums []int, startIndex int) {
// 收集子集,要放在终止添加的上面,否则会漏掉自己
temp := make([]int, len(path))
copy(temp, path)
res = append(res, temp)
if startIndex >= len(nums) { // 可以不加, for循环会自动退出
return
}
for i := startIndex; i < len(nums); i++ {
path = append(path, nums[i])
backtracking(nums, i+1)
path = path[:len(path)-1]
}
}
func subsets(nums []int) [][]int {
res = make([][]int, 0)
path = make([]int, 0)
backtracking(nums, 0)
return res
}
func main() {
println("UseCase 1......")
fmt.Printf("%+v\n", subsets([]int{1, 2, 3}))
println("UseCase 2......")
fmt.Printf("%+v\n", subsets([]int{0}))
}