当前位置: 代码迷 >> 综合 >> LeetCode 2044. 统计按位或能得到最大值的子集数目
  详细解决方案

LeetCode 2044. 统计按位或能得到最大值的子集数目

热度:4   发布时间:2023-12-13 03:37:53.0

题目描述

2044. 统计按位或能得到最大值的子集数目

解法:DFS

二进制枚举和状态压缩的 DP 我硬是没看懂什么意思,但是 DFS 还是很明确的,对于一个数,取或者不取其是两条分支,按照前面数取后面数的规则,我们保证了将多条「具有相同前缀」的搜索路径进行复用,从而不用担心子集枚举不全的问题

class Solution {
    
public:int countMaxOrSubsets(vector<int>& nums) {
    int ans = 0, max = 0;dfs(0, 0, max, ans, nums);return ans;}void dfs(int u, int val, int& max, int& ans, vector<int>& nums){
    if (u == nums.size()){
    if (val > max){
    max = val;ans = 1;}else if (val == max)ans++;return;}dfs(u + 1, val, max, ans, nums);dfs(u + 1, val | nums[u], max, ans, nums);}
};