zoukankan      html  css  js  c++  java
  • 剑指Offer:二进制中1的个数

    剑指Offer:二进制中1的个数

    题目描述:
    请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

    解题思路:

    1. 想着将二进制无符号整数转换成字符串itoa(),然后遍历找出1,但是在C++编程中,头文件stdlib没有包含;
    2. 善于利用位运算:n&1,n为二进制数,得到n的最低位的值;
    3. 通过判断是否为1,之后将n>>1位赋值给n;
    4. 不断循环判断每一个数字是否为1。
    class Solution {
    public:
        int hammingWeight(uint32_t n) 
        {
            int num=0;
            while (n>0)
            {
                if(n&1==1)
                    num++;
                n=n>>1;
            }
            return num;
        }
    };
    

    解题思路2:

    1. 采用n&(n-1)的表达式能将数字 n 的二进制表示中,最右边的 1 变成 0;
    2. 例如:101 & 100 => 100100 & 011 => 0
    class Solution {
    public:
        int hammingWeight(uint32_t n) {
            int ret = 0;
            while (n != 0) {
                n &= n-1;
                ret ++;
            }
            return ret;
        }
    };
    
  • 相关阅读:
    Weblogic(CVE-2018-2894)
    WebLogic (CVE-2018-2628)
    WebLogic(CVE-2017-10271)
    DC-5靶机渗透
    DC-4靶机渗透
    DC-3靶机渗透
    DC-2靶机渗透
    时间戳倒计时
    服务器的一些Linux命令
    CCF试题清单
  • 原文地址:https://www.cnblogs.com/Tavi/p/12514032.html
Copyright © 2011-2022 走看看