一、78. 子集 - 力扣(LeetCode) (leetcode-cn.com)
记原序列长度为n,原序列中的每个数字在子集中有两种状态,1为存在,0为不存在,那么就可以表示为长度为n的0/1串
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> vet;
vector<int>t;
int n = nums.size();
for(int i = 0 ; i < (1 << n); i++){
t.clear();
for(int j = 0 ; j < n; j++){
if(i & (1 << j)) t.push_back(nums[j]);
}
vet.push_back(t);
}
return vet;
}
};
解释上方if语句中的与运算:
由于为与运算,即同时为一才为一,i可以看做该子集的0/1串,那么j只要跟在i中的1同时出现,那么就不为0,可以写进vector中