题意:一个int类型正整数,求它的二进制形式有多少个1
思路:除2递归,可以解出,看了discuss里面有个解更牛,一行结束战斗,是用n&(n-1)再递归,其实并不是很懂怎么想出来这么做的,可能是自己对二进制的处理根本不怎么了解吧,但是这样做结果是对的
代码:
int hammingWeight(uint32_t n) { if(n == 0) return 0; if(n % 2 == 1) return 1 + hammingWeight(n/2); else return hammingWeight(n/2); }
大神代码是这样的:
int hammingWeight(uint32_t n) { return n == 0 ? 0 : 1 + hammingWeight(n & (n - 1)); }