首页 > 其他 > 详细

LeetCode 191 Number of 1 Bits

时间:2015-03-14 12:15:11      阅读:275      评论:0      收藏:0      [点我收藏+]

LeetCode 191 Number of 1 Bits 

解法一(较为传统都解法):使用将n不断右移,并与1想&得到1的个数;(也有使用除法/2的,明显除法的运行效率要低于位移)

时间复杂度:0(logn)

 1 int hammingWeight(uint32_t n){
 2     int count=0;
 3     
 4     while (n!=0) {
 5         if (n & 1) {
 6             ++count;
 7         }
 8         n = n>>1;
 9     }
10     
11     return count;
12 }

 

解法二:

使用n&(n-1)的方法

假使 n =0x110101

                n                    n-1               n&(n-1)

step1:   110101          110100          110100

step2:   110100          110011          110000

step3:   110000          101111          100000

step4:   100000          011111          000000

发现有几个1,就循环几次n&(n-1)得到0,明显较于上者运行效率更高些。

时间复杂度:O(M),M是n中1的个数。

代码如下:

 1 int hammingWeight(uint32_t n){
 2     int count=0;
 3     
 4     while (n!=0) {
 5         count++;
 6         n = n&(n-1);
 7     }
 8     
 9     return count;
10 }

 

LeetCode 191 Number of 1 Bits

原文:http://www.cnblogs.com/wudongyang/p/4337295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!