vlambda博客
学习文章列表

2044. 统计按位或能得到最大值的子集数目 深度优先搜索



方法:深度优先搜索




  1. 计算所有数字的位或值(位或随着位数增加变多或者不变,全部数字未获必然最大值)

  2. 累计计算选择当前位和不选当前位可获得最大值的数目

 
   
   
 
 class Solution { public int countMaxOrSubsets(int[] nums) { int max = 0; for(int num:nums){ max |= num; }
return dfs(nums,max,0,0); }
private int dfs(int[] nums, int max, int index,int curr){ if(index == nums.length ){ return curr == max?1:0; }
int ans = dfs(nums,max,index+1,(curr|nums[index])); ans += dfs(nums,max,index+1,curr);
return ans; } }

2044. 统计按位或能得到最大值的子集数目 深度优先搜索


为什么可以用深度优先搜索?

范围只有16,粗估计深度最大为16,不会超过递归栈深度。


为什么方法名写的不是回溯?

使用回溯是需要存在状态回退的。此部分代码不需要状态回退