Код: Выделить всё
private void backtrack (int[] nums, int index, int currOR, int maxOR, int count){
if (currOR == maxOR) count++;
for (int i = index; i < nums.length; i++) {
backtrack(nums, i + 1, currOR | nums[i], maxOR, count);
}
}
public int countMaxOrSubsets(int[] nums) {
int maxOR = 0;
for (int num : nums) {
maxOR |= num;
}
int count = 0;
backtrack(nums, 0, 0, maxOR, count);
return count;
}
Код: Выделить всё
private void backtrack (int[] nums, int index, int currOR, int maxOR, int[] count){
if (currOR == maxOR) count[0]++;
for (int i = index; i < nums.length; i++) {
backtrack(nums, i + 1, currOR | nums[i], maxOR, count);
}
}
public int countMaxOrSubsets(int[] nums) {
int maxOR = 0;
for (int num : nums) {
maxOR |= num;
}
int[] count = new int[1];
backtrack(nums, 0, 0, maxOR, count);
return count[0];
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -recursive
Мобильная версия