java leetcode之[神奇的位运算 简单]461. 汉明距离

题目的链接在这里:https://leetcode-cn.com/problems/hamming-distance/

目录


题目大意

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

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


一、示意图

java leetcode之[神奇的位运算 简单]461. 汉明距离

二、解题思路

当然有个笨方法 就是先把这两个数 转换为2进制,然后再一个一个的比较 记录

位置比较

代码如下:

class Solution {
      public   int hammingDistance(int x, int y) {
        //当然有个笨方法 就是先把这两个数 转换为2进制,然后再一个一个的比较 记录
        String tempx=getTwo(x);
        String tempy=getTwo(y);
/*        StringBuilder sb1=new StringBuilder(tempx);
        StringBuilder sb2=new StringBuilder(tempy);*/
     /*   //然后直接就扩容好了
        boolean flagx=false;
        boolean flagy=false;*/
        int lenx=tempx.length();
        int leny=tempy.length();
      //  int max=Math.max(lenx,leny);
       /* //进行扩容
        //但是还有一个就是判断他们有没有被翻转
        while (lenx<max){
            //原来细节在这  那就索性不判断长度了
            sb1.append(0);
            lenx++;
            flagx=true;
        }
        if(flagx) {
            tempx = sb1.reverse().toString();
        }
        while (leny<max){
            sb2.append(0);
            leny++;
            flagy=true;
        }
        if(flagy) {
            tempy = sb2.reverse().toString();
        }
        //这样就两个长度相同了*/
        int result=0;
        char[] charx=tempx.toCharArray();
        char[] chary=tempy.toCharArray();
 /*       int temp=0;
        if(lenx!=leny){
            //说明有个最大值
            if(lenx>leny){
                temp=lenx-leny;
            }else{
                temp=leny-lenx;
            }
        }*/
        //这里应该是从后面往前面比
        int i=lenx-1;
        int j=leny-1;
        for( ;i>=0&&j>=0;i--,j--){
            //然后还有这里的问题
            if(charx[i]!=chary[j]){
                result++;
            }
        }
        //这里有个细节是 因为如果等于0 就不会出现在首位 所以肯定是1 所以肯定是不同的 那就是肯定是这两个长度的差值 作为最后的结果
       //好像这个细节不奏效 那还是需要进行判断的呀
        if(i>=0){
            //说明i还没到 那就需要进行判断
            while (i>=0){
                if(charx[i]!='0')
                    result++;
                i--;
            }
        }
        if(j>=0){
            //说明j还没到 那就需要进行判断
            while (j>=0){
                if(chary[j]!='0')
                    result++;
                j--;
            }
        }
        return result;

    }

    public  String getTwo(int x){
        //问题出在了这里 就是需要进行翻转一下
        String result="";
        while(x>0){
            result+=(x%2);
            x/=2;
        }
        StringBuilder sb=new StringBuilder(result);
        return sb.reverse().toString();
    }
}

java leetcode之[神奇的位运算 简单]461. 汉明距离

上一篇:leetcode-461. 汉明距离


下一篇:数列分块入门 1 LibreOJ - 6277