ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

豆包 LeetCode 78. 子集 Golang实现

豆包    LeetCode 78. 子集 Golang实现 LeetCode 78. 子集 Golang 实现数组元素互不相同返回全部幂集子集。提供 回溯DFS、迭代增量、位运算 三种实现。回溯 DFS标准推荐gopackage mainimport “fmt”func subsets(nums []int) [][]int {var res [][]intvar path []intvar dfs func(start int)dfs func(start int) {// 保存副本tmp : make([]int, len(path))copy(tmp, path)res append(res, tmp)for i : start; i len(nums); i { path append(path, nums[i]) dfs(i 1) path path[:len(path)-1] } } dfs(0) return res}func main() {ans : subsets([]int{1,2,3})fmt.Println(ans)}迭代增量法遍历每个数字复制现有子集追加当前元素gofunc subsets(nums []int) [][]int {res : [][]int{{}}for _, num : range nums {for _, item : range res {newSub : make([]int, len(item))copy(newSub, item)newSub append(newSub, num)res append(res, newSub)}}return res}位运算解法总共有 2^n 个子集mask二进制位标记选/不选gofunc subsets(nums []int) [][]int {n : len(nums)var res [][]intfor mask : 0; mask (1 n); mask {var cur []intfor i : 0; i n; i {if mask (1 i) ! 0 {cur append(cur, nums[i])}}res append(res, cur)}return res}复杂度时间O(n \cdot 2^n)一共 2^n 个子集每个子集最多n个元素拷贝空间O(n)回溯递归栈深度输出结果不计入Go注意点切片是引用类型存入结果必须 copy 副本否则后续修改path会覆盖已保存数据。需要我给你 LeetCode 90 子集II含重复元素Golang版本吗
返回列表