【leetcode】201. Bitwise AND of Numbers Range
来源:互联网 发布:张曼菱 知乎 编辑:程序博客网 时间:2024/06/18 13:21
基本思路是,如果m == 0,那么结果肯定为0.
否则, 将数字转换成二进制形式。
讨论,转换成二进制后,
位数长度不相等,那么,对于n的高位肯定为0,
而低位,也因为在m和n之间的数递增而与为0。考虑6和8, 6 == 110, 8 == 1000,
不管m到n之间有多少个数,只要当2^n - 1到2^n的转换过程中,末尾相与即为0。
位数长度相等,那么就从高位开始遍历相等项,直到不相等项,那么累加和即为结果。
/** * @author johnsondu * @problem Bitwise AND of Numbers Range * @time O(len), where len is the length of digits in binary form * @space O(len) * @url https://leetcode.com/problems/bitwise-and-of-numbers-range/ * @strategy see code * @status Accepted, runtime beats 8.06% of cpp submissions. 96ms * @time 20:22 Nov 11th 2015 */class Solution {public: int rangeBitwiseAnd(int m, int n) { if(m < 1) return 0; vector<int> p; vector<int> q; int t1 = m, t2 = n; while(t1) { p.push_back(t1 % 2); t1 /= 2; } while(t2) { q.push_back(t2 % 2); t2 /= 2; } if(p.size() != q.size()) return 0; int len = p.size() - 1; int idx = len; int ans = 0; while(p[idx] == q[idx] && idx >= 0) { ans += (1 << idx) * p[idx]; idx --; } return ans; }};
1 0