leetcode 1318 Minimum Flips to Make a OR b Equal to c

Given 3 positives numbers ab 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.

 

Example 1:

Input: a = 2, b = 6, c = 5
Output: 3
Explanation: After flips a = 1 , b = 4 , c = 5 such that (a OR b == c)

Example 2:

Input: a = 4, b = 2, c = 7
Output: 1

Example 3:

Input: a = 1, b = 2, c = 3
Output: 0

 

Constraints:

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

题目大意:给定三个数a, b, c,对a,b,c的二进制表示,每修改二进制比特中的一位为1次,返回修改a和b的最少次数,使得a or b = c.

思路:我们先计算a or b, 然后让其结果的二进制和c的二进制一位一位的进行比较,如果某一位不同,则需要修改a或者b,假如某一位c为0, 而a or b对应的为1,则要考虑a和b对应的是不是都为1,如果都为1,则都要改,修改次数加2,否则只要修改一个,如果某一位c为1,则只要修改a或者b中那一位为1,修改次数加1.

 1 class Solution {
 2 public:
 3     int minFlips(int a, int b, int c) {
 4         int cnt = 0;
 5         int A = a | b;
 6         while (A || c) {
 7             int d1 = c & 1, d2 = A & 1;
 8             if (d1 != d2) {
 9                 if ((d1 == 0) && ((a & 1) == 1 && (b & 1) == 1))
10                     cnt += 2;
11                 else
12                     cnt++;
13             }
14             c >>= 1;
15             A >>= 1;
16             a >>= 1;
17             b >>= 1;
18         }
19         return cnt;
20     }
21 };
posted @ 2020-01-13 15:47  琴影  阅读(370)  评论(0编辑  收藏  举报