• 【剑指offer】15.二进制中1的个数


    15.二进制中1的个数

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

    示例 1:

    输入:00000000000000000000000000001011
    输出:3
    解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
    

    示例 2:

    输入:00000000000000000000000010000000
    输出:1
    解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
    

    示例 3:

    输入:11111111111111111111111111111101
    输出:31
    解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
    

    1.逐位判断

    th:使用位运算符将数字每次右移一次 & 1如果为1 就result++

    time:O(n)

    space:O(1)

    public int hammingWeight(int n) {
            int result = 0;
            while(n!=0){
                result+= n & 1;
                n >>>= 1;
            }
            return result;
        }
    

    2.巧用n &=(n-1)

    th:假设 n = 3 n= 0101 n-1 = 0100 n&=(n-1) n = 0100 消去一个1 result++ 再次循环

    n -1 = 0000 n&=(n-1) n=0 退出循环 result = 2

    time:O(n)

    space:O(1)

    public int hammingWeight(int n) {
            //1.巧用 n&=(n-1)
            int result = 0;
    
            while(n!=0){
                result++;
                n &= (n-1);
            }
            return result;
        }
    
  • 相关阅读:
    判断当天是周几
    九九乘法表
    js创建table表格
    tab切换-自动、点击、内容变换
    必须关注的25位知名JavaScript开发者
    静态路由
    dubbo
    SOA、SOAP、RPC
    【转】spring之任务调度
    Redis-cli命令最新总结【转】
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860663.html
Copyright © 2020-2023  润新知