没想到Golang的append()函数不太能这样用🌚
1 场景重现
用 Golang 完成 leetcode-78.子集 的时候,发现执行某个测试用例输出了错误的答案,子集中包含了两组相同的集合。
1.1 解题
题目:
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我写的一个解答:
func subsets(nums []int) [][]int {
if nums == nil {
return [][]int{}
}
sort.Ints(nums)
sets := [][]int{
{}}
for i := 0; i < len(nums); i++ {
sets = append(sets, sub([]int{}, nums, i+1)...)
}
return sets
}
func sub(prefix, options []int, need int) [][]int {
need--
var sets [][]int
for i := 0; i < len(options); i++ {
if need > 0 {
sets = append(sets, sub(append(prefix, options[i]), options[i+1:], need)...)
} else {
sets = append(sets, append(prefix, options[i]))
}
}
return sets
}
测试代码:
type args struct {
nums []int
}
var tests = []struct {
name string
ar