Я пытаюсь решить проблему с двоичным разрывом с помощью рекурсии. Его можно легко решить без рекурсии. Но я хочу решить эту проблему с помощью рекурсии. Нижеследующая программа принимает целое число как входное и находит двоичный разрыв.Решение двоичного разрыва с использованием рекурсии
Пример:
input= 9, Binary form = 1001, Answer = 2
input=37, Binary form = 100101, Answer = 2
Он находит максимальное число нулей, которые происходят между двумя 1-й в двоичном представлении.
Я хочу решить это в O (logn). Прямо сейчас, приведенная ниже программа просто подсчитывает общее количество нулей и дает результат 3 вместо 2. Как мне исправить это, чтобы получить правильный результат?
class BinaryGap {
public int solution(int N){
return solution(N, false, 0);
}
public int solution(int N, boolean prevFlag, int memo) {
if(N<2)
return 0;
int remainder = N%2 ;
if(prevFlag){
if(remainder == 0){
memo = 1 + solution(N/2, prevFlag, memo);
} else {
int newGap = solution(N/2, prevFlag, memo);
if(newGap > memo)
memo = newGap;
}
} else {
prevFlag = (remainder == 1);
return solution(N/2, prevFlag, 0);
}
return memo;
}
public static void main(String args[]){
BinaryGap obj = new BinaryGap();
System.out.println(obj.solution(37));
}
}
Он работает. Можете ли вы рассказать мне о некоторых хороших ресурсах, которые я могу использовать для улучшения навыков написания рекурсии? – Zack
Но ваше решение, например, не работает на 100. Он должен возвращать 0 определенно. – xuesheng
он не работает для хвостов чисел с нулями. например. 8 –