本文共 1248 字,大约阅读时间需要 4 分钟。
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.
Java代码:public class Solution { public int rangeBitwiseAnd(int m, int n) { Set set = new HashSet<>(); for (int tmp = m, i = 0; tmp > 0; tmp = tmp / 2, i++) { if (tmp % 2 == 1) { set.add(i); } } if (set.size() == 0) return 0; ArrayListlist = new ArrayList (); Iterator ite = set.iterator(); while (ite.hasNext()) { int tmp = (Integer) ite.next(); if ((n >> tmp) % 2 == 0) list.add(tmp); } for (int i = 0; i < list.size(); i++) set.remove(list.get(i)); if (set.size() == 0) return 0; int middle = m + (n - m) / 2; while (middle != m) { ite = set.iterator(); list.clear(); while (ite.hasNext()) { int tmp = (Integer) ite.next(); if ((middle >> tmp) % 2 == 0) list.add(tmp); } for (int i = 0; i < list.size(); i++) set.remove(list.get(i)); if (set.size() == 0) return 0; middle = m + (middle - m) / 2; } ite = set.iterator(); int result = 0; while (ite.hasNext()) { int tmp = (Integer) ite.next(); result += 1 << tmp; } return result; }}
转载地址:http://ivuni.baihongyu.com/