1 Star 0 Fork 0

Paulden/Algorithm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
subsets.go 2.32 KB
一键复制 编辑 原始数据 按行查看 历史
package list
import (
"sort"
)
// Problem Definition: https://leetcode.cn/problems/subsets/
func subsets(nums []int) [][]int {
var ret [][]int
var track []int
var backtrack func(s int)
backtrack = func(s int) {
tmp := make([]int, len(track))
_ = copy(tmp, track)
ret = append(ret, tmp)
for i := s; i < len(nums); i++ {
track = append(track, nums[i])
backtrack(i + 1)
track = track[:len(track)-1]
}
}
backtrack(0)
return ret
}
// from the sangfor's interview test
func subsets2(n int) int {
track := []int{0}
cnt := 0
var backtrack func(s int)
backtrack = func(s int) {
sz := len(track)
if sz >= 2 {
a, b := track[sz-2], track[sz-1]
if b-a > 2 {
return
}
}
if n-track[sz-1] <= 2 {
cnt++
}
for i := s; i < n; i++ {
track = append(track, i)
backtrack(i + 1)
track = track[:len(track)-1]
}
}
backtrack(1)
return cnt
}
func combine(n, k int) [][]int {
var track []int
var ret [][]int
var backtrack func(s int)
backtrack = func(s int) {
if len(track) == k {
tmp := make([]int, k)
_ = copy(tmp, track)
ret = append(ret, tmp)
return
}
for i := s; i <= n; i++ {
track = append(track, i)
backtrack(i + 1)
track = track[:len(track)-1]
}
}
backtrack(1)
return ret
}
func subsetWithDup(nums []int) (ret [][]int) {
sort.Ints(nums)
var track []int
var backtrack func(s int)
backtrack = func(s int) {
tmp := make([]int, len(track))
copy(tmp, track)
ret = append(ret, tmp)
for i := s; i < len(nums); i++ {
if i > s && nums[i] == nums[i-1] {
continue
}
track = append(track, nums[i])
backtrack(i + 1)
track = track[:len(track)-1]
}
}
backtrack(0)
return
}
// Problem Definition: https://www.nowcoder.com/practice/75e6cd5b85ab41c6a7c43359a74e869a?tpId=117&tqId=37742&rp=1
func combinationSum(nums []int, target int) [][]int {
var cnt int
var track []int
var ret [][]int
var backtrack func(s int)
backtrack = func(s int) {
if cnt == target {
tmp := make([]int, len(track))
copy(tmp, track)
ret = append(ret, tmp)
return
} else if cnt > target {
return
}
for i := s; i < len(nums); i++ {
if i > s && nums[i] == nums[i-1] {
continue
}
track = append(track, nums[i])
cnt += nums[i]
backtrack(i + 1)
track = track[:len(track)-1]
cnt -= nums[i]
}
}
backtrack(0)
return ret
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/guuzaa/algorithm.git
git@gitee.com:guuzaa/algorithm.git
guuzaa
algorithm
Algorithm
main

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385