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.
题目大意:给一个范围,返回这个范围中所有的数按位相与最后的结果。
解题思路:当拿到这个题目的时候,我是拒绝的,这么简单的题,直接与然后返回不就是了,然后发现范围太大会TLE,后来想范围里有一个数某位是0,其他的就不用判断了,肯定是0,然后写出来这个解法,
public int rangeBitwiseAnd(int m, int n) { int res = 0; int[] bits = new int[32]; Set<Integer> offset = new HashSet<>(); for (int i = 0; i < 32; i++) { bits[i] = 1; } out: for (int j = 0; j < 32; j++) { for (int i = m; i <= n; i++) { if (bits[j] == 0) break; if ((i & (1 << j)) == 0) { bits[j] = 0; offset.add(j); } if (offset.size() == 32 || i == Integer.MAX_VALUE) { break out; } } } for (int i = 0; i < 32; i++) { res += bits[i] << i; } return res; }