/**
* Input: x = 1, y = 4
* Output: 2
* Explanation:
* 1 (0 0 0 1)
* 4 (0 1 0 0)
* ↑ ↑
* @author yfmei
*
*/
public class HammingDistance {
public int hammingDistance(int x, int y) {
//String tr = Integer.toBinaryString(x);
//二进制转换
String xStr = toBinary(x);
String yStr = toBinary(y);
System.out.println("xStr.length:"+xStr.length()+" yStr.length:"+yStr.length());
//位数是否相同
int diff = getdiff(xStr, yStr);
if(diff > 0){//x比y大,y从左边开始补0
yStr = completeBinary(diff,yStr);
}else{//x比y小,x从左边开始补0
xStr = completeBinary(-diff,xStr);
}
System.out.println("xStr.length:"+xStr.length()+" yStr.length:"+yStr.length());
int num = xStr.length();
int distance = 0;
for(int i = 0;i < num;i++){
if(xStr.charAt(i) != yStr.charAt(i)){
distance = distance+1;
}
}
return distance;
}
public String toBinary(int x) {
String xStr = "" ;
while(x > 0){
xStr = ((x %2 == 0?"0":"1")+xStr);
x = x / 2;
}
return xStr;
}
/**
* 获取位数差
* @param xStr
* @param yStr
* @return
*/
public int getdiff(String xStr,String yStr) {
return xStr.length() -yStr.length();
}
/**
* 补足位数
* @param diff
* @param str
* @return
*/
public String completeBinary(int diff,String str) {
for(int i = 0;i < diff;i++){
str = "0"+str;
}
return str;
}
public static void main(String[] args) {
HammingDistance hammingDistance = new HammingDistance();
int distance = hammingDistance.hammingDistance(680142203, 1111953568);
System.out.println(distance);
//java提供的计算汉明间距的方法
System.out.println(Integer.bitCount(680142203 ^ 1111953568));
}
}
汉明间距
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 缩进:p{text-indent:2em;} 行间距:p{line-height:1.5em;} 中文字间距、字母...
- 1.为什么要写这样一个分类? 在应用开发过程中,我们经常需要设置Label之间的行间距,以及字间距,每次都是复制粘...