type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 27, 2025 03:20 PM
给你三个正整数
a
、b
和 c
。你可以对
a
和 b
的二进制表示进行位翻转操作,返回能够使按位或运算 a
OR b
== c
成立的最小翻转次数。「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。
位运算——与或(AND/OR)
遍历
直接按照题意判断每一位的的情况。
根据运算性质
- c == 0
- a == 0, b == 0:不用操作
- a == 1 或者 b == 1(两者不同时为 1):只操作一次
- a == 1,b == 1:需要操作两次
- c == 1
- a == 0, b == 0:操作一次
- a 和 b 至少有一个为 1:不用操作
而
(a | b) ^ c
表示 (a | b)
和 c
可以根据最后的 1 得到有多少不同的位数。但是有一个例外 a == 1,b == 1, c == 0
时,需要增加一次额外的次数,我们进行特判。📎 参考
- 无