【剑指offer】面试题10: 二进制中1的个数
来源:互联网 发布:淘宝店主工具 编辑:程序博客网 时间:2024/05/22 00:33
题目
实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例如9的二进制表示为1001,输入9,输出的结果是2.
其实自己来说并不太喜欢这种二进制游戏,但是也是自己的弱项,还是跟着书上分析一下。
首先,数字在计算机内部存储本身就是二进制,我们在做运算的时候,不用傻傻的写一个函数将十进制转换成二进制了。
右移,可能导致死循环(右移补符号位)
int NumOf1(int n) { int cnt = 0; while(n) { if (n & 1) cnt++; n = n >> 1; } return cnt;}
转换思路,n不变,flag左移没有符号位的限制,由于是int类型的n,flag左移31次
int NumOf1(int n) { int cnt = 0; int flag = 1; for (int i = 0; i < 32; i ++) { if (flag & n) cnt++; flag = flag << 1; } return cnt;}
取巧的解法:
一个数减1之后,最右边的1变为0,最右边1之后的0全部变为1,所以n和n-1做与运算,如果n中有1,结果就不为0。同时结果也变为去掉n中最右边的1的数。
int NumOf1(int n) { int cnt = 0; while(n) { cnt++; n = n & n-1; } return cnt;}
神思路,虽然我觉得临场不可能创造出这么好的算法,但是有个印象,知道这样的题目,在特定的情况下有这么一种解法,也算是扩宽思路。
0 0
- [剑指offer][面试题10]二进制中1的个数
- 《剑指offer》面试题10二进制中1的个数
- 【剑指offer】面试题10:二进制中1的个数
- 【剑指offer】面试题10:二进制中1的个数
- 剑指offer 面试题10 二进制中1的个数
- 剑指Offer:面试题10 二进制中1的个数
- 《剑指Offer》面试题10:二进制中1的个数
- 剑指offer-面试题10-二进制中1的个数
- 【剑指offer】 面试题10: 二进制中1的个数
- 剑指offer-面试题10:二进制中1的个数
- 剑指Offer----面试题10:二进制中1的个数
- 【剑指offer】面试题10: 二进制中1的个数
- 剑指offer面试题10:二进制中1的个数
- 剑指offer--面试题10:二进制中1的个数
- 剑指offer-面试题10-二进制中1的个数
- 【剑指offer】面试题10:二进制中1的个数
- 剑指offer面试题10:二进制中1的个数
- 剑指offer-面试题10 二进制中 1 的个数
- 通过 JSP Model 深入学习 MVC
- 最靠谱的CDH5安装指南
- 在数据库中怎么判断哪个(些)字段是主码
- Vijos P1850 小朋友的数字(动态规划,最大子段和)
- 利用redis缓存热门数据,分页的一种思路
- 【剑指offer】面试题10: 二进制中1的个数
- linux下编译安装ACE6
- php CI框架下封装datatable插件处理类
- 编程之美读书笔记-分层遍历二叉树
- Auto Layout 使用心得(三)—— 自定义 cell 并使用 Auto Layout
- 利用Apache Bench测试Web引擎性能
- C#之Socket断线重连
- React Native For Android
- 计算labview一个while循环的运行时间