题目要求
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
核心思路
- 如果一个整数不为0,那么这个整数至少有一位是1,如果把这个整数减1,那么原来整数最右边的1就会变为0,原来在1右边的所有0都会变为1。那么,利用n = n & (n - 1),如1100 & 1011 = 1000,也就是说,把整数减1,再和原数进行与运算,就会消去一个1。利用这个特性我们就可以算出1的个数。
- 把整数转换为二进制字符串,把字符串转为char数组,再进行遍历计算。
完整代码如下
/**
*输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
*/
public class Solution {
//核心思想:n = n & (n-1)
public int NumberOfOne1(int n) {
if(n == 0)
return 0;
int count = 0;
while(n != 0) {
n = n & (n-1);
count++;
}
return count;
}
//核心思想:字符串数组
public int NumberOfOne2(int n) {
int count = 0;
char[] charArray = Integer.toBinaryString(n).toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (charArray[i] == \'1\') {
count++;
}
}
return count;
}
public static void main(String[] args) {
Solution sl = new Solution();
System.out.println(sl.NumberOfOne1(5));
System.out.println(sl.NumberOfOne2(5));
}
}
继续阅读与本文标签相同的文章
上一篇 :
中国半导体企业的“芯”路历程
下一篇 :
苹果三星发联合声明:减少专利诉讼
-
圆通回应“承诺达”解散:由直营模式改回加盟商授权经营
2026-05-18栏目: 教程
-
2019 年度 “CCF 杰出会员” 公布,清华北大等86人当选
2026-05-18栏目: 教程
-
3步轻松搞定Spring Boot缓存
2026-05-18栏目: 教程
-
5G机皇已来 三星Galaxy Note10+5G正式登陆中国
2026-05-18栏目: 教程
-
威特动力:从“制造”到“智造”的跨越
2026-05-18栏目: 教程
