【发布时间】:2016-06-02 14:05:18
【问题描述】:
我正在尝试使用递归解决二进制间隙问题。无需递归即可轻松解决。但是我想用递归来解决这个问题。下面的程序将一个整数作为输入并找到二进制间隙。
例子:
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));
}
}
【问题讨论】:
标签: java algorithm recursion binary time-complexity