算法思路:
- 初始化count = 0,用于统计1的个数。
- 当n不等于0时,继续循环。
- n与1按位与,得到n的最后一位的值,如果是1,count加1。
- n无符号右移一位,移除最后一位,循环判断下一位。
- 循环结束,count即为n中1的个数。
- 返回count的值。
注释详细阐述了代码逻辑和算法思路,便于理解程序的意图和流程。
该算法时间复杂度为O(k),其中k为n中1的个数。空间复杂度为O(1)。
本题考察了对整数二进制表达的理解,以及按位与、移位运算的应用
public class Solution {
public int hammingWeight(int n) {
int count = 0;
//当n不等于0时,继续循环
while(n != 0){
//与1按位与,得到最后一位,如果是1,count加1
count += n & 1;
//移除最后一位,继续循环判断下一位
n >>>= 1;
}
//循环结束,count即为1的个数
return count;
}
}
算法思路:
- 初始化res = 0,用于统计1的个数。
- 当n不等于0时,继续循环。
- res加1,找到一个1。
- n与n-1按位与,会使n最低位的1变为0。这是该算法的精髓所在。
- 循环继续,直到n变为0。
- 循环结束,res即为n中1的个数。
- 返回res的值。
注释详细解释了代码逻辑和核心算法思路,有助于全面理解程序。
该算法时间复杂度为O(k),其中k为n中1的个数。空间复杂度为O(1)。
public class Solution {
public int hammingWeight(int n) {
int res = 0;
//当n不等于0时,继续循环
while(n != 0) {
//res加1,表示找到一个1
res++;
//n与n-1按位与,会使n最低位的1变为0。
n &= n - 1;
}
//循环结束,res即为1的个数
return res;
}
}