Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

子集 #129

Open
yankewei opened this issue Mar 31, 2021 · 1 comment
Open

子集 #129

yankewei opened this issue Mar 31, 2021 · 1 comment
Labels
中等 题目难度为中等 回溯算法 题目包含回溯算法解法 数组 题目类型为数组

Comments

@yankewei
Copy link
Owner

给你一个整数数组nums,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

@yankewei yankewei added 中等 题目难度为中等 回溯算法 题目包含回溯算法解法 数组 题目类型为数组 labels Mar 31, 2021
@yankewei
Copy link
Owner Author

回溯

func subsets(nums []int) [][]int {
    lengthNum := generate(nums, []int{}, 0, &[][]int{{}})
    return lengthNum
}

func generate(nums []int, set []int, start int, ret *[][]int) [][]int {
    if start >= len(nums) {
	return *ret
    }
    set = append(set, nums[start])
    *ret = append(*ret, set)
    generate(nums, set, start+1, ret)
    // 这里要copy一个临时的变量,因为set是一个切片,切片的本事是一个数组的指针,所以会有影响
    tmp := make([]int, len(set)-1)
    copy(tmp, set[:len(set)-1])
    generate(nums, tmp, start+1, ret)
    return *ret
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
中等 题目难度为中等 回溯算法 题目包含回溯算法解法 数组 题目类型为数组
Projects
None yet
Development

No branches or pull requests

1 participant