解题思路
先找到按位或可以的到的最大值
再进行dfs深搜,分为选择当前数和不选择当前数
代码
class Solution {
int count = 0,max = 0;
public int countMaxOrSubsets(int[] nums) {
for (int i : nums) {
max |= i;
}
dfs(nums,0,0);
return count;
}
public void dfs(int[] nums,int index,int cur){
if (index == nums.length){
if(cur == max){
count++;
}
return;
}
//选择这个数
dfs(nums, index+1, cur|nums[index]);
//不选择这个数
dfs(nums,index+1,cur);
}
}