- 可能引起死循环的解法
package tao.leetcode;
/**
* Created by Tao on 2017/7/30.
*/
public class MyLeetcode {
public static void main(String[] args) {
int x = 10;
int res = NumberOf1(x);
System.out.println(res);
}
private static int NumberOf1(int n) {
int count = 0;
while (n != 0) {
if ((n & 1) == 1) {
count++;
}
n = n >> 1;
}
return count;
}
}
- 整数右移一位和把整数除以2在数学上是等价的,但移位效率比除法效率更高。
- 当输入为负数时,最高位为1,会陷入死循环
- 常规解法
把一个整数减1,再和原整数做与运算,会把该整数最右边一个1变成0
package tao.leetcode;
/**
* Created by Tao on 2017/7/30.
*/
public class MyLeetcode {
public static void main(String[] args) {
int x = 10;
int res = NumberOf1(x);
System.out.println(res);
}
private static int NumberOf1(int n) {
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
return count;
}
}