201.數字範圍按位與
阿新 • • 發佈:2020-12-19
給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。
int rangeBitwiseAnd(int m, int n){
char offset = 0;
for(; m != n; ++offset)
{
m >>= 1;
n >>= 1;
}
return n << offset;
}
思路:連續數字按位與,假如其中的一位出現0,那麼這位就不需要在進行運算。
那麼可以理解成最後的有效位就是這些數字的公共位,就是有有一段範圍內的資料這些數字都是為1
可以看到最後輸出的就是公共都為1的位置。那麼也可以理解成尋找m, n兩個位置的連續的公共位都相同的位置,最後再輸出。