【剑指offer】二进制中1的个数 python+C++

196 阅读1分钟

【题目描述】

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

【思路】

在python3中,int类型数据的长度可以无限大,是动态长度,只要内存够大。

C++中一般是4Byte,32位。

常规做法,通过移位,flag起始值为1,在一个循环中,将flag不断左移一位,与n作与运算,就相当于逐位检测是否为1了。时间复杂度等于n的长度。

【代码】

c++:
class Solution {
public:
     int  NumberOf1(int n) {
         int flag=1;
         int count=0;
         while(flag){
             if(n & flag){
                 count++;
             }
             flag=flag<<1;
         }
         return count;
     }
};
python:
class Solution:
    def NumberOf1(self, n):
        # write code here
        flag=1
        count=0
        while(flag<2**32):
            if(n & flag):
                count+=1
            flag=flag<<1
        return count