• 算法题 位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;
        }
    }
  • 相关阅读:
    PAT 1059. Prime Factors
    PAT 1058. A+B in Hogwarts
    关于树状数组
    PAT 1057. Stack
    PAT 1056. Mice and Rice
    PAT 1055. The World's Richest
    PAT 1054. The Dominant Color
    fft_filter  designed to filter gridded data in an a
    matlab 1 yr oscillations
    RMVANNUAL
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13334814.html
Copyright © 2020-2023  润新知