最新のCodilityテストを試しましたか?
K-スパース数の定義に誤りがあり、混乱を招き、正しい進め方がわからなかったように感じました。したがって、Kスパース数を定義することから始めます。
2進数「100100010000」では、2つの連続する1の間に少なくとも2つの0があります。2進数「100010000100010」では、2つの連続する1の間に少なくとも3つの0があります。正の整数Nは、バイナリ表現の任意の2つの連続する1の間に少なくともK 0が存在する場合、Kスパースと呼ばれます。(私の強調)
したがって、最初に表示される数値100100010000は2スパースで、2番目の数値100010000100010は3スパースです。非常に単純ですが、アルゴリズムに組み込まれます。
関数を書く:
class Solution { public int sparse_binary_count(String S,String T,int K); }
それ、与えられた:
string S containing a binary representation of some positive integer A, string T containing a binary representation of some positive integer B, a positive integer K.
[A..B]の範囲内のKスパース整数の数を返します(両端を含む)
次に、このテストケースを示します。
たとえば、S = "101"(A = 5)、T = "1111"(B = 15)、K = 2の場合、[5]の範囲に2つのスパース整数が2つしかないため、関数は2を返す必要があります。 ..15]、つまり「1000」(つまり8)と「1001」(つまり9)。
基本的に、8、つまり基数2の1000は、2進表現に2つの連続した数がない場合でも、2スパース数であると言っています。何が得られますか?ここで何かが足りませんか?