Leetcode剑指Offer刷题指南:
解法:位运算
public class Solution {
public int hammingWeight(int n) {
int ret = 0;
while (n != 0) {
ret += n & 1;
n >>>= 1;
}
return ret;
}
}
public class Solution {
public int hammingWeight(int n) {
int ret = 0;
while (n != 0) {
ret++;
n &= (n - 1);
}
return ret;
}
}
解法:位运算
非进位和:a ^ b
进位和:(a & b) << 1
和:进位和 + 非进位和 = (a ^ b) + ((a & b) << 1)
循环,当进位为0时退出
class Solution {
public int add(int a, int b) {
while (b != 0) {
int c = (a & b) << 1;//进位和
a ^= b;//非进位和
b = c;//将c赋值给b,此时b为进位和
}
return a;
}
}