JZX轻语:简
LeetCode 1318 - 或运算的最小翻转次数
发表于2024年07月26日
可使用贪心法解决:从低位到高位逐位比较a、b和c的对应位,如果c的对应位为1,则a和b的对应位至少有一个为1,否则需要翻转1次即可。如果c的对应位为0,则a和b的对应位需要全为0,此时翻转次数为a的对应位 + b的对应位。因此,只需要逐位比较并累加需要翻转的次数即可。
class Solution:
def minFlips(self, a: int, b: int, c: int) -> int:
ans = 0
while a or b or c:
has_one = c & 1
cur_res = (a & 1) | (b & 1)
if has_one != cur_res:
if has_one:
ans += 1
else:
ans += (a & 1) + (b & 1)
a >>= 1
b >>= 1
c >>= 1
return ans