解题思路

nums数组所有子集添加进去就行

代码

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = [[]]
def dfs(startIndex: int, temp: list[int]):
if startIndex == len(nums): return

for i in range(startIndex, len(nums)):
temp.append(nums[i])
result.append(temp.copy())
dfs(i + 1, temp)
temp.pop()

dfs(0, [])
return result

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result;
vector<int> temp;
result.push_back(temp);

backtracking(0, temp, result, nums);
return result;
}
void backtracking(int startIndex, vector<int> &temp, vector<vector<int>> &result, vector<int> &nums) {
if (startIndex == nums.size()) return;

for (int i = startIndex; i < nums.size(); ++i) {
temp.push_back(nums[i]);
result.push_back(temp);
backtracking(i + 1, temp, result, nums);
temp.pop_back();
}
}
};

Go

var result [][]int

func subsets(nums []int) [][]int {
    result = [][]int{}
    result = append(result, []int{})
    backtracking(0, []int{}, nums)
    return result
}

func backtracking(startIndex int, temp []int, nums []int) {
    if startIndex == len(nums) {return}

    for i := startIndex; i < len(nums); i++ {
        temp = append(temp, nums[i])
        t := make([]int, len(temp))
        copy(t, temp)
        result = append(result, t)
        backtracking(i + 1, temp, nums)
        temp = temp[:len(temp) - 1]
    }
}