1318. 或运算的最小翻转次数
大约 1 分钟
--- 
1318. 或运算的最小翻转次数
- 标签:位运算
- 难度:中等
题目链接
题目大意
描述:给定三个整数 、、。每次可以将 或 的某一位翻转( 或 )。
要求:返回使 所需的最小翻转次数。
示例:
- 示例 1:

输入:a = 2, b = 6, c = 5
输出:3
解释:翻转后 a = 1 , b = 4 , c = 5 使得 a OR b == c- 示例 2:
输入:a = 4, b = 2, c = 7
输出:1解题思路
思路 1:逐位检查
1. 核心思想
逐位比较 和 。如果 的某位为 ,则 和 的该位都需要为 ,翻转次数为 和 该位的 的个数。如果 的某位为 ,则 或 至少有一位为 ,如果都是 则需要翻转 次。
2. 代码
class Solution:
def minFlips(self, a: int, b: int, c: int) -> int:
ans = 0
for i in range(32):
ca, cb, cc = (a >> i) & 1, (b >> i) & 1, (c >> i) & 1
if cc == 0:
ans += ca + cb
else:
if ca == 0 and cb == 0:
ans += 1
return ans思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。