201-Bitwise AND of Numbers Range

kevin聰發表於2018-04-25

Description

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

For example, given the range [5, 7], you should return 4.


問題描述

給定範圍[m, n], 0 <= m <= n <= 2147483647, 返回範圍內所有整數的按位交的值。


問題分析

我的理解是求出m 和 n的位表示的字首, 然後在字首後面加上0


解法

public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
      int i = 0;
      //迭代求出字首, 注意這裡退出迴圈的條件為m != n
      //i為右邊需要新增的0的個數  
      while(m != n){
        m >>= 1;
        n >>= 1;
        i++;  
      }  
      //在字首後面新增0  
      return m << i;  
    }
}

相關文章