【leetcode】201. Bitwise AND of Numbers Range
2015-11-12 20:30
253 查看
基本思路是,如果m == 0,那么结果肯定为0.
否则, 将数字转换成二进制形式。
讨论,转换成二进制后,
位数长度不相等,那么,对于n的高位肯定为0,
而低位,也因为在m和n之间的数递增而与为0。考虑6和8, 6 == 110, 8 == 1000,
不管m到n之间有多少个数,只要当2^n - 1到2^n的转换过程中,末尾相与即为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; } };
相关文章推荐
- 磁盘阵列控制器三种冗余方式
- MySQL存储过程调试工具-dbForge Studio for MySQL
- Jsoup模拟登陆例子
- Java [leetcode 34]Search for a Range
- Thinking in Java 整理笔记:字符串
- Extending query processing with search components
- 最大公共子串(C语言实现)
- JavaScript中With 语句使用方法实例
- WRF CMAQ安装出现错误简单汇总
- 最短路 dijkstra---poj3268
- 异步任务Asynctask实现图片墙
- 学习点——2015-11-12
- 使用python进行数据分析
- Windows Service 开发,安装与调试
- php long time(1)
- Android手机间无线互传功能探索及实现
- Java基础语法总结(二 beac )
- JAVA 集合List,数组,Set,Map,直接的相互转换
- JSP之购物车
- 墙里墙外