标签:
1
.给定 32
(100000),返回 1
给定 5
(101),返回 2
给定 1023
(111111111),返回 9
首先第一种思路,也是给的整数无符号时的解法:
主要思路是将二进制数的最低位加入sum,然后右移一位。
1 public class Solution { 2 /** 3 * @param num: an integer 4 * @return: an integer, the number of ones in num 5 */ 6 public int countOnes(int num) { 7 int sum = 0; 8 while(num != 0){ 9 sum += num % 2; 10 num = num / 2; 11 } 12 return sum; 13 } 14 };
然而给出的并不是无符号数。
若给-1(FFFF FFFFH) 则会输出-1;
设x = x31x30x29...xa1000..0 xa之后的1为从低位开始的第一个1。
x - 1 = x31x30x29...xa0111111..1 。
因此 x&(x-1) = x31x30x29...xa000...0 。
这样就找到了最低位的一个1并且将它置为0。
循环至x == 0,至此二进制数中所有的1都被找出来了.
1 public class Solution { 2 /** 3 * @param num: an integer 4 * @return: an integer, the number of ones in num 5 */ 6 public int countOnes(int num) { 7 // write your code here 8 int sum = 0; 9 while(num != 0){ 10 num = num & (num - 1); 11 sum++; 12 } 13 return sum; 14 } 15 };
标签:
原文地址:http://www.cnblogs.com/FJH1994/p/5020369.html