剑指offer面试题10 二进制中1的个数 java实现

来源:互联网 发布:把ubuntu安装到u盘 编辑:程序博客网 时间:2024/06/03 19:57

解题思路:

常规的思路可能是将一个数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的那一位为1count++;}// 将flag左移一位,相当于乘以2flag = flag << 1;}return count;}}


原创粉丝点击