image.png

思路

  • 逐个位进行运算,如果c当前为1,只要a和b当前位任意一个为1即可,当c当前位为0,则只需a和b当前位任意一位为1即可,但是不可以同时为1.

    代码

    1. public int minFlips(int a, int b, int c) {
    2. int res = 0;
    3. while (a != 0 || b != 0 || c != 0) {
    4. int t = (a & 1) + (b & 1);
    5. res += (c & 1) == 0 ? t : t == 0 ? 1 : 0;
    6. a >>= 1;
    7. b >>= 1;
    8. c >>= 1;
    9. }
    10. return res;
    11. }
    或运算的最小翻转次数