从今天开始每天刷一道LeetCode算法题,可不能再偷懒了
题目:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
|
The above arrows point to positions where the corresponding bits are different.
Subscribe to see which companies asked this question.
问题陈述:
求两个数的汉明距离,就是找出这两个数的二进制形式对应位不相同的位,求这样的位的个数
用c++的位操作符:
操作符 | 功能 | 用法 | |
---|---|---|---|
~ | 取反 | 0变1,1变0 | |
<< | 左移 | 后面补0 | |
>> | 右移 | 前面补0,后面吞位 | |
& | 位与 | 只有两个都为1,则为1。x&…00100…用于提取x某一位 | |
^ | 位异或 | 只有一个为1,则为 1。用于判断两位是否相同 a^b^a = b 用于交换数值 | |
\ | 位或 | 有一个或2个1,则为1。用于做and运算 |
题目思路:
从末位开始逐位判断x和y是否不同(或者做异或操作),不同则在距离上加1。
|
运行结果:
太艰难了,第一道题做了小半天,哎,一定要坚持下去
参考资料:
- 《c++ primer》 位操作符 P134
- wcxdell的专栏