461. Hamming Distance

题目的要求是得出两个整数的二进制表示下对应位数上的不同数字的位数。
下方是官网给出的范例,可以帮助理解。

Input: x = 1, y = 4
Output: 2
Explanation:1 (0 0 0 1)
            4 (0 1 0 0)
                   ↑ ↑
The above arrows point to positions where the corresponding bits are different.

这个题目要解出来很简单,只需要知道异或这个概念就行了:两个数(二进制)值相同得0,不相同得1
因此只要设一个变量result = x ^ y,再去数result表示为二进制时1的个数就行了。代码如下

public class Solution {
    public int hammingDistance(int x, int y) {
        String temp = Integer.toBinaryString(x ^ y);
        int count = 0;
        char[] tempArray = temp.toCharArray();
        for (int i = 0; i < temp.length(); i++) {
            if (tempArray[i] == '1') {
                count += 1;
            }
        }
        return count;
    }
}

Top Solution里还提到了Java代码库里面已经有内置的函数Integer.bitCount(x)来统计一个整数二进制表示下1的个数,所以此题还可以简化成return Integer.bitCount( x ^ y);。还一种不同的思路来计算一个数(二进制表示时)1的个数,通过每次右移再与1与依次检验每一位上是否为1

int result = x ^ y;
int count = 0;
for (int i = 0; i < 32; i++) {
    count += (result >> i) & 1; 
}
return count;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文首发于 baishusama.github.io,欢迎围观~肝不动业务代码的时候,就时不时地做个题吧/w\ 题...
    白蜀黍阅读 250评论 0 0
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 678评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 许多年来,中国的经济一直处于通胀的状态,也就是百姓常说的,钱越来越毛,越来越不值钱。二十年前,万元户就是中产以上,...
    王钰太阅读 454评论 0 0
  • 文 / 珍珠海 大理的景比你想象的好看,故事却不一定有你想象的好听。 因其面朝洱海,背靠苍山,大理成为很多人的向往...
    楠珠珠阅读 820评论 11 10