剑指offer 11二进制中1的个数
来源:互联网 发布:怎样修改网络密码 编辑:程序博客网 时间:2024/05/22 10:27
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1.常规做法,由于要考虑到负数,所以不方便将给定的数字右移,因为如果n为负数,那么右移的话,左边的空缺会被填1,当然,如果n为正数,那么左边的空缺会被填0。所以我们可以先设置mark=1,通过左移mark来遍历n中的1的个数。
public class Solution { public int NumberOf1(int n) { if(n==0)return 0; int number=0; int mark=1; while(mark!=0){ if((n&mark)!=0)number++; mark=mark<<1; } return number; }}
2.高效率的做法
根据n&(n-1)的性质来做,这种方式会删除掉最右边的1,而这个1左边的数字不变。
如果n&(n-1)之后这个数不为0,那么说明n就不会为0,那么n至少有一个1,而去掉的则是最右边的1。
public class Solution { public int NumberOf1(int n) { if(n==0)return 0; int number=0; while(n!=0){ number++; n=n&(n-1); } return number; }}
0 0
- 剑指offer:二进制中1的个数
- 剑指offer:二进制中1的个数
- 【剑指offer】二进制中1的个数
- [剑指Offer]二进制中1的个数
- 【剑指offer】二进制中1的个数
- 剑指offer--二进制中1的个数
- 剑指offer:二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer 二进制中1的个数
- 《剑指offer》二进制中1的个数
- 剑指 offer:二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- [剑指offer]二进制中1的个数
- 《剑指offer》-二进制中1的个数
- 剑指offer|二进制中1的个数
- C#——判断成绩是否通过
- HDU 1548 A strange lift
- FPGA图像处理系列:图像缩放
- android日常学习3-23 实现打字游戏
- HDU1272-小希的迷宫
- 剑指offer 11二进制中1的个数
- 分析system_call中断处理过程
- git基础快速入门
- LeetCode#103. Binary Tree Zigzag Level Order Traversal My Submissions Question
- PAT 两个有序链表序列的合并
- Unity中Awake和Start的区别
- 5-31 字符串循环左移
- 仿写“同行说”之界面分析篇
- XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks随手记