求二进制中1的个数

来源:互联网 发布:linux vi命令日志 编辑:程序博客网 时间:2024/06/13 12:44

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

复习了一下原码、反码、补码的转换关系及来源,看到一个博客介绍的很详细,包括原码与补码本质上取模运算后得到的结果是相同的。
https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

本题的方法很巧妙,通过每次n-1再与n作与操作,其实是将最高位不变,其余位均作取反操作。

此方法为参照别人的方法:

class Solution {public:     int  NumberOf1(int n) {         int count = 0;         while(n)         {             n = (n-1)&n;             ++count;         }        return count;     }};

今天还练习了一下斐波那契数列,1,1,2,3,5,…简单的递归/动态规划均可解。基本题:数列第n项的取值、爬楼梯、矩形填充。