代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。