「Leetcode-算法_Easy461」通过「简单」题目学习位运算

2023-05-02,,

Easy 461.汉明距离

因为原题目翻译效果不佳,这里是笔者自己的理解。

输入两个二进制数 x、y,

输出将 y 变为 x 所需改变的二进制位数,成为汉明距离。

注意:

0 ≤ x, y < 2e31.

示例:

输入: x = 1, y = 4

输出: 2

解释:

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

补充「运算

符号 描述 运算规则
& 两个位都为 1 时,结果才为 1
| 两个位都为 0 时,结果才为 0
^ 异或 两个位相同为 0,相异为 1
~ 取反 0 变 1,1 变 0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补 0
>> 右移 各二进位全部右移若干位,对无符号数,高位补 0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补 0(逻辑右移)

Java右移:

/**
* Java使用 >> 表示算术右移 补符号位
* >>> 表示逻辑右移 补0
*/

推导:

使用异或运算的性质 “相同为0 不同为1”
统计异或运算后的数有多少位 1

代码

class Solution {
public int hammingDistance(int x, int y) {
int result = 0 ;
int XOR = x ^ y;
while (XOR != 0) {
result += XOR & 1;
XOR >>>= 1;
}
return result;
}
}

「Leetcode-算法_Easy461」通过「简单」题目学习位运算的相关教程结束。

《「Leetcode-算法_Easy461」通过「简单」题目学习位运算.doc》

下载本文的Word格式文档,以方便收藏与打印。