剑指offer 面试题15 二进制中1的个数

问题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

输入:整数n

输出:二进制表示中1的个数

思路:

本题有个巧妙之处,n&(n-1)可使最右边的1置0.

每循环一次,将最右边的1置为0.循环的次数等于二进制表示中的1的个数。

代码:

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         while(n)
         {
             ++count;
             n=n&(n-1);  // set the most right 1 to 0
         }
         return count;
     }
};

复杂度分析:循环次数等于二进制表示中1的个数,空间复杂度为O(1).

发布了56 篇原创文章 · 获赞 10 · 访问量 6795

猜你喜欢

转载自blog.csdn.net/qq_22148493/article/details/104447293