Number of 1 bits(算法练习)

今天心血来潮做了下算法题Number of 1 bits这是道比较简单的题目。leetcode可以尝试一下多种语言,所以也算是个学语言的好方法。

C++实现

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int number=0;
        for(int i=0; i<32; i++)
        {
            if(n & 1) //C++和C里0相当于false,其他数字都true
                number++;
            n=n>>1;
        }
        return number;
    }
};
讨论里得票最多的代码
int hammingWeight(uint32_t n)
{
    int res = 0;
    while(n)
    {
        n &= n - 1;
        ++ res;
    }
    return res;
}

Java实现

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int number=0;
        while(n != 0)
        {
            if((n & 1)==1)
                number++;
            n=n>>>1;
        }
        return number;
    }
}

还有一个更好的,来自讨论
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
    int count = 0;
    for (; n != 0; n >>>= 1)
        count += 1 & n;

    return count;
}
}
还有人用String来匹配
public int hammingWeight(int n) {
    int count = 0;
    String str = Integer.toBinaryString(n);
    for(int i=0; i<str.length(); i++) {
        if(str.charAt(i)=='1') {
            count++;
        }
    }
    return count;
}

Java的位运算有一点特殊的是他的>>>, 和C++里的>>效果相同, 称为无符号位移,而<<和>>则表示也位移,区别在>>上,java里会保持结果的符号,也就是说如果是负数,将由1来补位。

Python

同样来自讨论
class Solution:
# @param n, an integer
# @return an integer
def hammingWeight(self, n):
    return bin(n).count('1')

被python简洁震惊了

另外,位计算和java相同。

Javascript

var hammingWeight = function(n) {

     var numOfZero = 0;
        while(n){

            numOfZero += n%2;
            n>>=1;
        }
     return numOfZero;
};

余数相加也是个好办法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值