我想用遞歸來解決二進制間隙問題。無需遞歸即可輕鬆解決。但我想用遞歸來解決這個問題。下面的程序將一個整數作爲輸入並找出二進制間隔。使用遞歸求解二進制間隙
實施例:
input= 9, Binary form = 1001, Answer = 2
input=37, Binary form = 100101, Answer = 2
它發現在二進制表示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 –