题目的链接在这里: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();
}
}