0%

剑指offer(9)——其他(共10道题目)

参考资料:

剑指offer题目汇总

递归和循环(共4道题目)

模板:

  题目描述:

  解题思路

  注意问题

  补充知识点


11、二进制中1的个数(10.28)


11、二进制中1的个数

  题目描述:

  输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

  解题思路:两种思路:右移n、左移flag;

  注意问题

  1.while(i<=31):对于负数,右移一位,左端补1,如果判断条件变成while(n!=0),则回陷入死循环;

  2.对于n总共需要移动31位而非32位。第一位不用移动就可以进行判断;

  补充知识点:java位操作符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Solution {
public int NumberOf1(int n) {
int flag=1;
int count=0;
int i=0;
while(i<=31)//最多移31位。最后一位不用移动
{
if((flag & n) ==1)
count++;
n=n>>1;
i++;
}
return count;
}
}