题目的链接在这里:https://leetcode-cn.com/problems/hamming-distance/
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
当然有个笨方法 就是先把这两个数 转换为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(); } }