2023年6月7日 星期三

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

解題思路

每次都把 a, b, c 的LSB 抓出來看,如果 a, b 的 bit OR 不等於 c,就要進一步檢查。

如果 c 是 0,代表 a,b 一定要都是0,所以算 a, b是1的數量。

如果 c 是 1,那就只需要改一個bit,直接加一就好。


程式碼

class Solution {
public:
    int minFlips(int a, int b, int c) {
        int ans = 0;
        while(a != 0 || b!= 0 || c != 0)
        {
            int m1 = a % 2, m2 = b % 2, m3 = c % 2;
            if((m1 | m2) != m3)
            {
                if(m3 == 0)
                    ans += (m1 == 1) + (m2 == 1);
                else
                    ans += 1;
            }
            a /= 2;
            b /= 2;
            c /= 2;
        }
        return ans;
    }
};

沒有留言:

張貼留言