1. 程式人生 > >劍指offer二進位制中1的個數

劍指offer二進位制中1的個數

以在下的水平,首先想到的是除和取整,如果取整有1就加1,然後就超時了,除的效率要比位運算低很多,面試官會問的哦

果然要用博大精深的位運算,用n和1進行與運算,(其實就是比末位),假設取得數是n,那麼我們有兩個思路,第一個是n右移(比倒數第二位),直到n變為0;第二個思路1左移,第一次左移就是10,其實也是比第二位;

兩種思路有什麼區別呢?第一種會引起死迴圈,比如int型,第一個數字是符號位,1為負,0為正,那麼如果是負數的話,為了保證它始終為負,首位會始終是1,產生死迴圈;第二種靠譜

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        int flag = 1;
        while(flag!=0){
            if((n&flag)!= 0){
            count += 1;}
            flag = flag << 1;}
        return count;
    }
}

python實現失敗了,不明覺厲,找個答案看看

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        num = n
        flag = 1
        count = 0
        while flag<=0xffffffff:
            if num & flag:
                count += 1
            flag = flag << 1
        return count