我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/number-of-1-bits/description/
题目描述:
知识点:位运算
思路一:位运算
JAVA代码:
public class Solution {
public int hammingWeight(int n) {
int count = 0;
for(int i = 0; i < 32; i++){
if(1 == ((n >> i) & 1)){
count++;
}
}
return count;
}
}
LeetCode解题报告:
思路二:将32位进制数拆分成4个byte类型的数,用哈希表记录每个byte数中1的个数
和LeetCode190——颠倒二进制位中的思路三一样,采用记忆化搜索的方式。
JAVA代码:
public class Solution {
private HashMap<Byte, Integer> hashMap = new HashMap<>();
public int hammingWeight(int n) {
Byte[] bytes = new Byte[4];
for (int i = 0; i < 4; i++) {
bytes[i] = (byte)((n >> i * 8) & 0xFF);
System.out.println(bytes[i]);
}
int count = 0;
for (int i = 0; i < 4; i++) {
count += countOne(bytes[i]);
}
return count;
}
private int countOne(byte n){
Integer value = hashMap.get(n);
if(null != value){
return value;
}
value = 0;
for(int i = 0; i < 8; i++){
if(1 == ((n >> i) & 1)){
value++;
}
}
hashMap.put(n, value);
return value;
}
}
LeetCode解题报告: