我将尝试使用递归解决二进制间隔问题。虽然不使用递归也可以轻松解决此问题,但我想使用递归来解决。下面的程序接受一个整数作为输入,并找到二进制间隔。
示例:
示例:
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));
}
}
while (n % 2 == 0 && n > 0) n >>= 1;
- jjnunog