子集的枚举

通过二进制枚举子集。利用一个int 变量,循环自增,就可以得到2^n种状态,具有极高的泛用性。

mask = 1 << n 表示 全选的情况下的mask数值+1

和dfs感觉上差不多,都是一种暴力搜索的方式,但是写法相对简单。

https://leetcode-cn.com/problems/count-number-of-maximum-bitwise-or-subsets/submissions/

class Solution {
public:
    int countMaxOrSubsets(vector<int>& nums) {
        int n=nums.size();
        int mask=1<<n;
        int ans=0,max=0;
        for(int s=0;s<mask;s++){
            int cur=0;
            for(int i=0;i<n;i++){
                if(((s>>i) & 1)==1) cur |=nums[i];
            }
            if(cur>max){
                max=cur;
                ans=1;
            }else if(cur==max){
                ans++;
            }
        }
        return ans;
    }
};
posted @ 2022-03-15 20:27  秋月桐  阅读(58)  评论(0编辑  收藏  举报