The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note: 0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ? ?
The above arrows point to positions where the corresponding bits are different. 汉明距离是指x、y的二进制表示中,相同位置上数字不相同的所有情况数。
var hammingDistance = function(x, y) {
var arrX=[];
var arrY=[];
toArray(x,arrX);
toArray(y,arrY);
var count=0;
var len=arrX.length>arrY.length?arrX.length:arrY.length;
for(var i=0;i<len;i++){
if (arrX[i]!==1) {
arrX[i]=0;
}
if (arrY[i]!==1) {
arrY[i]=0;
}
}
for(var i=0;i<len;i++){
if(arrX[i]!=arrY[i]){
count++;
}
}
return count;
};
function toArray(x,arr){
var ret=x%2;
arr.push(ret);
var left=parseInt(x/2);
if(left>1){
toArray(left,arr);
}else{
arr.push(left);
}
}
总体思路就是先转化成2进制,再把两个数组空位填0;最后比较
后来去查了一下大家的做法。。人家直接把两个数异或之后再转二进制,数有多少个1就好了,感觉智商被压制。。
顺便又想起来js有直接转2进制的实现。不需要自己写。就当复习一下二进制的转化好了。。
改良版代码:
var hammingDistance = function(x, y) {
var a=x^y;
var b=a.toString(2).split("");
var count=0;
for(var i=b.length-1;i>=0;i--){
if(b[i]==1){count++}
}
return count;
};
但是其实。。运行时间并没有减少。。不过代码简洁了很多~~