【leetCode】461. Hamming Distance

239 阅读1分钟

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;
};

但是其实。。运行时间并没有减少。。不过代码简洁了很多~~