题目

暴力破解使用toString方法将十进制转换成二进制,再比较每个字符是否相同

var hammingDistance = function(x, y) {
  var ans = 0;
  x = x.toString(2)
  y = y.toString(2)
  var max = '',min = ''
  if(x.length>y.length){
    max = x
    min = y
  }else{
    max = y
    min = x
  }
  let maxi = max.length-1
  let mini = min.length-1
  while(maxi>=0&&mini>=0){
    if(max[maxi]!==min[mini])ans++
    maxi--
    mini--
  }
  while(maxi>=0){
    if(max[maxi]!=='0')ans++
    maxi--
  }
  return ans
};

辗转相除法

var hammingDistance = function(x, y) {
  var ans = 0
  while(x&&y){
    var tempx = x%2
    var tempy = y%2
    if(tempx!==tempy)ans++;
    x = Math.floor(x/2)
    y = Math.floor(y/2)
  }
  var temp = Math.max(x,y)
  while(temp){
    if(temp%2!==0)ans++;
    temp = Math.floor(temp/2)
  }
  return ans
};

位移法

var hammingDistance = function(x, y) {
  let s = x^y,ans= 0
  while(s!=0){
    ans += s & 1
    s >>= 1
  }
  return ans
};