題目:編程
計算在一個 32 位的整數的二進制表示中有多少個 1
.spa
給定 32
(100000),返回 1
code
給定 5
(101),返回 2
blog
給定 1023
(111111111),返回 10it
編程:io
方式一:普通方法(思路就是進行斷除,注意先判斷餘數 L10 再覆蓋原來的整數 L13 的順序)class
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 count = 0 ; 9 while(num!=0){ 10 if(num%2==1){ 11 count++; 12 } 13 num = num/2; 14 } 15 return count ; 16 } 17 };
方式二:高效方法(位運算,且須要知道n&(n-1)的做用能夠消掉最右邊的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 count = 0 ; 9 while(num!=0){ 10 num = num&(num-1); 11 count++; 12 } 13 return count ; 14 } 15 };