数字范围按位与

07/03/2021

leetcode-数字范围按位与

题目描述

给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。

示例 1:

输入:left = 5, right = 7
输出:4
示例 2:

输入:left = 0, right = 0
输出:0
示例 3:

输入:left = 1, right = 2147483647
输出:0

提示:

  • 0 <= left <= right <= 231 - 1

本人题解

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var rangeBitwiseAnd = function(m, n) {
  if (m === n) {
    return m & n
  } else if (m === 0) {
    return 0
  } else {
    var b = get2(m);
    if (b < n) {
      return 0
    }
    var a = m & m + 1;
    for (var i = m + 1; i < n+1; i++) {
      a = a & i;
    }
    return a;
  }
}
 
var get2 = function(num) {
  for (var i = 1; ; i = i * 2) {
    if (num < i) {
      return i
    }
  }
}

分析

忘了。以后再补