Skip to content

Latest commit

 

History

History
64 lines (51 loc) · 1.57 KB

README_CN.md

File metadata and controls

64 lines (51 loc) · 1.57 KB

2429. 最小 XOR

给你两个正整数 num1num2 ,找出满足下述条件的整数 x

  • x 的置位数和 num2 相同,且
  • x XOR num1 的值 最小

注意 XOR 是按位异或运算。

返回整数 x 。题目保证,对于生成的测试用例, x唯一确定 的。

整数的 置位数 是其二进制表示中 1 的数目。

示例 1:

输入: num1 = 3, num2 = 5
输出: 3
解释:
num1 和 num2 的二进制表示分别是 0011 和 0101 。
整数 3 的置位数与 num2 相同,且 3 XOR 3 = 0 是最小的。

示例 2:

输入: num1 = 1, num2 = 12
输出: 3
解释:
num1 和 num2 的二进制表示分别是 0001 和 1100 。
整数 3 的置位数与 num2 相同,且 3 XOR 1 = 2 是最小的。

提示:

  • 1 <= num1, num2 <= 109

题解 (Rust)

1. 题解

impl Solution {
    pub fn minimize_xor(num1: i32, num2: i32) -> i32 {
        let ones1 = num1.count_ones() as i32;
        let ones2 = num2.count_ones() as i32;
        let mut i = 0;
        let mut x = num1;

        for _ in 0..(ones1 - ones2).max(ones2 - ones1) {
            if ones1 > ones2 {
                while x & (1 << i) == 0 {
                    i += 1;
                }

                x ^= 1 << i;
            } else {
                while x & (1 << i) != 0 {
                    i += 1;
                }

                x |= 1 << i;
            }
        }

        x
    }
}