博客
关于我
leetcode题解191-位1的个数
阅读量:790 次
发布时间:2023-01-31

本文共 693 字,大约阅读时间需要 2 分钟。

编写一个函数来计算无符号整数的二进制表达式中的‘1’的个数(汉明重量)

要实现一个Java函数,该函数接收一个整数,将其转换为二进制表示并统计其中‘1’的个数。这个问题可以通过两种方式解决:位移和取反运算符,或者使用循环和掩码。

方法分析

选项1:位移和取反运算符这种方法针对正数和负数分别处理。对于正数,每次右移检查最后一位是否为1,并右移;对于负数,先将数转换为正数,然后重复同样的步骤,最后计算结果为32减去总数。

选项2:循环和掩码这种方法直接遍历32位,使用掩码检查每个位是否为1,不需要显式处理正负数。

方法实现

方法代码

public int hammingWeight(int n) {    int x = n;    int count = 0;    int mask = 1;    for (int i = 0; i < 32; i++) {        if ((mask & x) != 0) {            count++;        }        mask <<= 1;    }    return count;}

方法描述

  • 初始化变量:将输入整数n赋值给变量x,初始化计数器count为0,以及掩码mask为1。
  • 循环每一位:使用循环遍历每一位(共32次),检查当前掩码与x的按位与结果是否为非零。如果结果非零,说明当前位为1,计数器加一。
  • 左移掩码:每次循环将掩码左移一位,检查下一位。
  • 返回结果:循环结束后,返回计数器的值,即为汉明重量。
  • 该方法适用于所有整数,无论是正数还是负数,均能正确统计其二进制表示中的‘1’的个数。

    转载地址:http://qhgyk.baihongyu.com/

    你可能感兴趣的文章
    leaflet军事标绘-直线箭头修改(leaflet篇.87)
    查看>>
    leaflet军事标绘-细直线箭头绘制(leaflet篇.82)
    查看>>
    leaflet删除所有图层(leaflet篇.25)
    查看>>
    leaflet加载接入天地图(leaflet篇.1)
    查看>>
    leaflet加载接入百度地图(leaflet篇.2)
    查看>>
    leaflet加载接入腾讯矢量、腾讯影像地图(leaflet篇.4)
    查看>>
    leaflet动态热力图分析(leaflet篇.16)
    查看>>
    leaflet动态热力图(大数据版)(leaflet篇.17)
    查看>>
    leaflet区域聚合点(点击后散开并进行合理定位)(leaflet篇.22)
    查看>>
    leaflet叠加geojson图层(leaflet篇.38)
    查看>>
    leaflet叠加geojson图层(挖洞)(leaflet篇.43)
    查看>>
    leaflet叠加多个面(面的数据结构)(leaflet篇.62)
    查看>>
    leaflet图标跳动(leaflet篇.45)
    查看>>
    leaflet地图无级别缩放(移动端)(leaflet篇.76)
    查看>>
    leaflet多边形空间查询(ElasticSearch技术实现)(leaflet篇.52)
    查看>>
    leaflet实现wms服务面要素可点击(leaflet篇.30)
    查看>>
    Leaflet快速入门与加载OSM显示地图
    查看>>
    leaflet接入geoserver发布的热力图服务(leaflet篇.29)
    查看>>
    leaflet接入土地资源(leaflet篇.55)
    查看>>
    leaflet接入天地图(经纬度投影256)(leaflet篇.24)
    查看>>