Bitwise AND of Numbers Range (LeetCode)
Question:
https://leetcode.com/problems/bitwise-and-of-numbers-range/
其实就是求n和m的相同部分的值。比如n=110****, m=111****,则值为1100000。所以可以简单从最高位bit开始比较,如果相同则加到结果里,不同则退出循环.
或者m和n先相与,得到110****,只保留这个值里最高位连续的几个1,就是结果。
class Solution { public: int rangeBitwiseAnd(int m, int n) { if (m == n) return m; unsigned int mask = 0x80000000; int result = 0; for (int i = 0; i < 32; i++) { // if same continue, else break if ((m&mask) == (n&mask)) result += m&mask; else break; mask = (mask >> 1); } return result; } };
浙公网安备 33010602011771号