范围数位与结果

原题

  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.算法

题目大意

   给一个范围,返回这个范围中全部的数按位相与最后的结果。this

解题思路

  当m!=n,那么最末位一定等0,由于[m, n]一定包含奇偶数,相与最末位等0。能够将m,n都右移一位,记为mk、 nk,这样就至关于将[m, n]之间的全部的数都右移动了一位,当mk=nk的时候,说明以前[m, n]之间的数右移一位后是相等的,右移后的数做AND操做,结果仍是m(=n),因此操做就能够中止了记录右移的次数,offset,m>>offset即为所求结果spa

代码实现

算法实现类.net

public class Solution {

    public int rangeBitwiseAnd(int m, int n) {
        int offset = 0;

        while (m != n) {
            m >>= 1;
            n >>= 1;
            offset++;
        }

        return m << offset;
    }
}
相关文章
相关标签/搜索