leetcode遍历子集

子集

给你一个整数数组\(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中的代码

class Solution {
public:
    void backtrack(vector<vector<int>>& res,vector<int>& path,vector<int>& nums,int index){
        if(index>nums.size()) return ;
        res.push_back(path);
        for(int i=index;i<nums.size();i++){
            path.push_back(nums[i]);
            backtrack(res,path,nums,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> res;
        vector<int> path;
        backtrack(res,path,nums,0);
        return res;
    }
};
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e5+100;
int vis[maxn],a[maxn];
int ans[maxn],cnt=0,n;
void dfs(int x){
	for(int i=1;i<=cnt;i++){
		cout<<ans[i]<<" ";
	}
	cout<<endl;
	for(int i=x;i<=n;i++){
		cnt++;
		ans[cnt]=a[i];
		dfs(i+1);
		cnt--;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		a[i]=i;
	}
	dfs(1);
}

子集 II

给你一个整数数组\(nums\),其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:
输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:
输入:nums = [0]
输出:[[],[0]]

提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10

class Solution {
public:
    void backtrack(vector<vector<int>>& res,vector<int>& path,vector<int>& nums,int index){
        if(index>nums.size()) return ;
        res.push_back(path);
        for(int i=index;i<nums.size();i++){
            if(i!=index&&nums[i]==nums[i-1]) continue;
            path.push_back(nums[i]);
            backtrack(res,path,nums,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> res;
        vector<int> path;
        backtrack(res,path,nums,0);
        return res;
    }
};
posted @ 2023-11-23 21:06  lipu123  阅读(21)  评论(0)    收藏  举报