/**
* 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之间的行间距,以及字间距,每次都是复制粘...