JZX轻语:简

LeetCode 1318 - 或运算的最小翻转次数

发表于2024年07月26日

#贪心 #位运算

可使用贪心法解决:从低位到高位逐位比较abc的对应位,如果c的对应位为1,则ab的对应位至少有一个为1,否则需要翻转1次即可。如果c的对应位为0,则ab的对应位需要全为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
        

闪念标签:LC

题目链接:https://leetcode.cn/problems/minimum-flips-to-make-a-or-b-equal-to-c/