跳到主要内容

201.数字范围按位与

链接:201.数字范围按位与
难度:Medium
标签:位运算
简介:给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。

题解 1 - typescript

  • 编辑时间:2020-08-23
  • 执行用时:240ms
  • 内存消耗:45.3MB
  • 编程语言:typescript
  • 解法介绍:把题目转换为公共前缀。
function rangeBitwiseAnd(m: number, n: number): number {
let shift = 0;
while (m < n) {
m >>= 1;
n >>= 1;
++shift;
}
return m << shift;
}

题解 2 - cpp

  • 编辑时间:2022-03-03
  • 执行用时:20ms
  • 内存消耗:5.8MB
  • 编程语言:cpp
  • 解法介绍:只有当两数最高位一致才可能非 0。
class Solution {
public:
int rangeBitwiseAnd(int left, int right) {
int cnt = 0;
for (; left != right; cnt++) {
left >>= 1;
right >>= 1;
}
return left << cnt;
}
};