Number of 1 bits(算法练习)

来源:互联网 发布:googlenet tensorflow 编辑:程序博客网 时间:2024/06/08 02:53

今天心血来潮做了下算法题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 valuepublic 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 integerdef 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
原创粉丝点击