题解的思路是通过逐位比较a、b和c的二进制表示,来确定需要进行多少次翻转以使得a OR b等于c。首先将a、b、c转换为二进制形式并补齐为相同长度,然后从最高位向最低位逐位进行比较。如果当前位的结果c不等于a或b的按位或结果,需要进行翻转。如果c的当前位是0,那么a和b的相应位都必须翻转为0;如果c的当前位是1,那么a和b中至少有一个位必须翻转为1。
时间复杂度: O(1)
空间复杂度: O(1)
# class containing the method to find minimum flips
class Solution:
def minFlips(self, a: int, b: int, c: int) -> int:
# Initialize counter for flips
flips = 0
# Convert numbers to binary strings and pad to the maximum length
a_bin, b_bin, c_bin = bin(a)[2:], bin(b)[2:], bin(c)[2:]
max_length = max(len(a_bin), len(b_bin), len(c_bin))
a_bin = a_bin.zfill(max_length)
b_bin = b_bin.zfill(max_length)
c_bin = c_bin.zfill(max_length)
# Iterate over each bit from the least significant to most significant
for i in range(max_length-1, -1, -1):
a_bit, b_bit, c_bit = int(a_bin[i]), int(b_bin[i]), int(c_bin[i])
# Determine necessary flips based on the target bit in c
if (a_bit | b_bit) != c_bit:
if c_bit == 0:
# Both bits must be turned off
flips += a_bit + b_bit
elif c_bit == 1:
# At least one bit must be turned on
flips += 1
# Return the total number of flips required
return flips