Given 3 positives numbers a
, b
and c
. Return the minimum flips required in some bits of a
and b
to make ( a
OR b
== c
). (bitwise OR operation).
Flip operation consists of change any single bit 1 to 0 or change the bit 0 to 1 in their binary representation.
Input: a = 2, b = 6, c = 5 Output: 3 Explanation: After flips a = 1 , b = 4 , c = 5 such that (a OR b == c)
Input: a = 4, b = 2, c = 7 Output: 1
Input: a = 1, b = 2, c = 3 Output: 0
1 <= a <= 10^9
1 <= b <= 10^9
1 <= c <= 10^9
impl Solution {
pub fn min_flips(a: i32, b: i32, c: i32) -> i32 {
let mut a = a;
let mut b = b;
let mut c = c;
let mut ret = 0;
while a > 0 || b > 0 || c > 0 {
let d = a & 1;
let e = b & 1;
let f = c & 1;
match (d << 2) + (e << 1) + f {
0b001 | 0b010 | 0b100 => ret += 1,
0b110 => ret += 2,
_ => (),
}
a >>= 1;
b >>= 1;
c >>= 1;
}
ret
}
}