剑指offer面试题10 二进制中1的个数 java实现
2017-08-14 19:21
447 查看
解题思路:
常规的思路可能是将一个数n和1做按位与(&)运算,若结果为1,则证明n的二进制表示中末位为1,计此时符合题目条件,计数器加1,然后将n用n/2赋值,继续上述过程。但该方法有个问题,针对负数,由于负数在计算机中是以补码的形式存储,所以对于负数不能用这种方法。可以换个思路。保持n不变,设置一个flag,flag从1开始,令n与flag做按位与运算,若为1则计数器加1。然后另flag左移一位,继续上述过程。
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
// 证明此时n的与flag相与得1的那一位为1
count++;
}
// 将flag左移一位,相当于乘以2
flag = flag << 1;
}
return count;
}
}
常规的思路可能是将一个数n和1做按位与(&)运算,若结果为1,则证明n的二进制表示中末位为1,计此时符合题目条件,计数器加1,然后将n用n/2赋值,继续上述过程。但该方法有个问题,针对负数,由于负数在计算机中是以补码的形式存储,所以对于负数不能用这种方法。可以换个思路。保持n不变,设置一个flag,flag从1开始,令n与flag做按位与运算,若为1则计数器加1。然后另flag左移一位,继续上述过程。
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
// 证明此时n的与flag相与得1的那一位为1
count++;
}
// 将flag左移一位,相当于乘以2
flag = flag << 1;
}
return count;
}
}
相关文章推荐
- 剑指offer--面试题10:二进制中1的个数--Java实现
- 剑指Offer 面试题15:二进制中1的个数 Java代码实现
- 剑指Offer面试题10(Java版):二进制中的1的个数
- 剑指Offer面试题10(Java版):二进制中的1的个数
- (剑指Offer)面试题10:二进制中1的个数
- 剑指offer 面试题51 java实现
- 剑指offer--面试题19:二叉树的镜像--Java实现
- 剑指offer 面试题10—二进制中1的个数
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指offer面试题3:二维数组中的查找 java实现
- 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
- 九度剑指Offer面试题10:二进制中1的个数(Java题解)
- 剑指Offer:面试题18——树的子结构(java实现)
- 剑指Offer:面试题7——用两个栈实现队列(java实现)
- 剑指offer面试题java实现之题6:重建二叉树
- 《剑指Offer》面试题10:二进制中1的个数
- 剑指Offer:面试题8——旋转数组的最小值(java实现)
- 《剑指Offer》学习笔记--面试题10:二进制中1的个数
- 剑指Offer:面试题11——数值的整数次方(java实现)