劍指offer二進位制中1的個數
阿新 • • 發佈:2018-12-12
以在下的水平,首先想到的是除和取整,如果取整有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