LeetCode Bitwise AND of Numbers Range

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.

 1 class Solution {

 2 public:

 3     int rangeBitwiseAnd(int m, int n) {

 4         int res = 0;

 5         

 6         for (int i=0; i<32 && (n!= 0 && m != 0); i++) {

 7             res = res | (bitvalue(m, n) << i);

 8             m>>=1;

 9             n>>=1;

10         }

11         return res;

12     }

13     

14     int bitvalue(int m, int n) {

15         if (n - m > 0) {

16             return 0;

17         }

18         if (n == m && (n&0x1 == 1)) {

19             return 1;

20         }

21         return 0;

22     }

23 };

都忘了自己第一次是怎么想出来的了,看了discuss的一种解法:

class Solution {

public:

    int rangeBitwiseAnd(int m, int n) {

        int x = m^n;

        int cnt = 0;

        while (x) {

            cnt++;

            x>>=1;

        }

        return (m & n) & ~((1<<cnt) - 1);

    }

};

简单很多

 

你可能感兴趣的:(LeetCode)