解題思路
每次都把 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; } };
沒有留言:
張貼留言