2044. 统计按位或能得到最大值的子集数目 深度优先搜索
方法:深度优先搜索
计算所有数字的位或值(位或随着位数增加变多或者不变,全部数字未获必然最大值)
累计计算选择当前位和不选当前位可获得最大值的数目
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;}}
为什么可以用深度优先搜索?
范围只有16,粗估计深度最大为16,不会超过递归栈深度。
为什么方法名写的不是回溯?
使用回溯是需要存在状态回退的。此部分代码不需要状态回退
