carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode461:汉明距离(hamming-distance) #102

Open carloscn opened 1 year ago

carloscn commented 1 year ago

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1: 输入:x = 1, y = 4 输出:2 解释:

1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

示例 2: 输入:x = 3, y = 1 输出:1

提示: 0 <= x, y <= 231 - 1

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/hamming-distance

carloscn commented 1 year ago

分析

一般方法就是,位运算,判断不相同的位的个数:

static size_t hamming_distance(size_t a, size_t b)
{
    size_t i = 0;
    size_t count = 0;

    for (i = 0; i < sizeof(size_t) * 8; i ++) {
        if (((a >> i) & 0x01u) != ((b >> i) & 0x01u)) {
            count ++;
        }
    }

    return count;
}

或者使用异或的方法,然后统计1的个数:

size_t utils_value_hamming_distance(size_t a, size_t b)
{
    size_t i = 0;
    size_t c = 0;
    char str[sizeof(a) * 8 + 1] = {0};

    c = a ^ b;
    if (utils_size_t_to_str(c, str)) {
        return 0;
    }

    return utils_str_count_char(str, '1');
}
carloscn commented 1 year ago

code:

https://github.com/carloscn/structstudy/blob/master/c_programming/common/15_hamming-distance_416.c

result:

image