1. 程式人生 > >Leetcode 201.數字範圍按位與

Leetcode 201.數字範圍按位與

數字範圍按位與

給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。

示例 1: 

輸入: [5,7]

輸出: 4

示例 2:

輸入: [0,1]

輸出: 0

 

我們就會知道與運算的一條性質:n & (n - 1) 可以將 n 最右邊的 1 變成 0 ,這件事情也是很酷的,因為其實不僅把 1 變成了 0,還跳過了很多 0,所以我們從暴力解法的反方向去思考,倒著做按位與,就可以很快得到解了。

 

1 public class
Solution{ 2 public int rangeBitwiseAnd(int m,int n){ 3 while(n>m){ 4 n&=(n-1); 5 } 6 return n; 7 } 8 }