Skip to content

Latest commit

 

History

History
41 lines (34 loc) · 1011 Bytes

0461.汉明距离.md

File metadata and controls

41 lines (34 loc) · 1011 Bytes

解题关键点

  • 对两个数执行二进制异或操作(^),然后计算结果中二进制 1 的数量即可

代码

impl Solution {
    pub fn hamming_distance(x: i32, y: i32) -> i32 {
        let mut z = x^y;
        let mut res = 0;
        while z > 0 {
            res += z % 2;
            z = z / 2;
        }
        res
    }
}

后来看了别人的答案,发现还有一个更简洁的写法,不过性能好像没有提升

impl Solution {
    pub fn hamming_distance(x: i32, y: i32) -> i32 {
        // count_ones() 和 count_zeros() 可以分别计算二进制中 1 和 0 的数量
        // 相关的 api 还有 leading_zeros 和 trailing_zeros 等
        (x ^ y).count_ones() as i32
    }
}

测试用例

assert_eq!(hamming_distance(1, 4), 2);
assert_eq!(hamming_distance(1, 3), 1);
assert_eq!(hamming_distance(1, 1073741824), 2);
assert_eq!(hamming_distance(0, 1073741823), 30);
assert_eq!(hamming_distance(1073741824, 1073741823), 31);