zoukankan      html  css  js  c++  java
  • 算法题 位1的个数

    题目:

    编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

     

    示例 1:

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

    示例 2:

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

    示例 3:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-1-bits
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析:

    这道题中可以采用&1的操作来判断末尾的一位是否为1,1的二进制形式为0000 0000 0000 0000 0000 0000 0000 0001,按位&的规则是二者均为1则结果为1,否则结果为0。由于1的二进制的前31位都为0,所以与它做&运算的数的前31位不论为多少,结果的前31位都为0。最后一位由于1的二进制最后一位为1,那么与它做&运算的数为1,则结果的最后一位也为1,否则为0。

    简而言之,最终结果的前31位数已经确定为0,最后一位数为1还是为0由和1做&运算的那个数决定。

    由于有32位所以循环32次来进行32次判断,每判断一次后,将判断过的位右移一位丢弃掉。

    代码:

    public class Solution {
        public int hammingWeight(int n) {
            int count = 0;
            for (int i = 0; i < 32; i++) {
                if ((n & 1) == 1)
                    count++;
                n >>= 1;
            }
            return count;
        }
    }
  • 相关阅读:
    cd 好吃的 收藏
    2011 无代码无意义…test 指针 v1
    转 云中漫步的 电子书 from simon
    2011无代码无意义 test_gets_scanf连用 等
    svn—relocate 的原因
    转 CString,string,char*的综合比较
    2011 无代码无意义 test_内存之 变量的边界 (图)
    转 解决"应用程序配置不正确,程序无法启动"
    转 删除已存在的SVN账户信息
    C#中IO类FileInfo和Directory操作实例
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13334814.html
Copyright © 2011-2022 走看看