Cに等しいBまたはを作るためにleetcode 1318の最小反転します

3つの陽性数を考えると  a、  b と  c最小値は、いくつかのビットに必要なフリップを返す  a と  b メイク(に  a OR  b ==  c )。(ビットごとのOR演算)。
フリップ動作が変更任意の単一のビット1を0に、またはそれらのバイナリ表現で1〜ビット0を変更から成ります。

 

例1:

入力:= 2、B = 6、C = 5
出力:3
説明:後フリップ= 1、B = 4、C = 5のように(aOR b== c

例2:

入力:= 4、B = 2、C = 7
出力:1

例3:

入力:= 1、B = 2、C = 3
出力:0

 

制約:

  • 1 <= a <= 10^9
  • 1 <= b <= 10^9
  • 1 <= c <= 10^9

タイトル効果:改変バイナリビットにそれぞれ1である3の所定数、B、A、BのC、Cのバイナリ表現は、編集の最小数が戻り、B、例えばaまたはb =そのC。

アイデアは:バイナリ比較とビット異なる、あなたがもしビット0℃、またはbを変更する必要がある場合はビットによるバイナリビットcは、我々は、最初に計算またはb、その結果をみましょう、とすべてが1の場合はビットcが1である場合またはb 1に対応し、そしてbは1に対応を検討する必要がありますが、すべて、、、限り修正などの回数プラス2を変更、変更、またはする必要がありますされていませんただ一つによって数を変更すると、そのビットまたはbが1である修正。

1  クラスソリューション{
 2  公共3      int型 minFlips(int型INT B、int型のC)を{
 4          INT CNT = 0 5          int型の A = | B;
6          一方、(A || C){
 7              INT D1 = C&1、D2 = A&1 8              もし(D1!= D2){
 9                  もし((D1 == 0)&&((&1)== 1 &&(B&1)== 1 ))
 10                      、CNT + = 2 ;
11                  
12                      CNT ++ ;
13              }
 14              C >> = 1 15              A >> = 1 16              A >> = 1 17              B >> = 1 18          }
 19          リターンCNT。
20      }
 21 }。

おすすめ

転載: www.cnblogs.com/qinduanyinghua/p/12187628.html