輸入一個整數(shù),輸出該二進制表示中1的個數(shù)

image.png

這個題的思路是比較簡單的
大家先想一下,一個十進制整數(shù)是如何轉(zhuǎn)化為二進制數(shù)的???
我們采用的是“除2取余,逆序排列"法。具體做法是:用2整除十進制整數(shù),可以得到一個商和余數(shù);再用2去除商,又會得到一個商和余數(shù),如此進行,直到商為小于1時為止,然后把先得到的余數(shù)作為二進制數(shù)的低位有效位,后得到的余數(shù)作為二進制數(shù)的高位有效位,依次排列起來。

所以這個思路就是:和2%,看是否為1,為1,結(jié)果加1,否則繼續(xù)

但是我們需要思考一下代碼如何優(yōu)化的問題?
如二進制是100000000000000000000,那我們需要的循環(huán)次數(shù)是多少,這個時間復(fù)雜太高,我們需要優(yōu)化
現(xiàn)在給出C的幾個優(yōu)化方法
1、

int NumberOf1(int n)
{
    int res=0;
    while(n!=0)
    {
    n&=(n-1);//我將這個方法稱為抹0法,將最右邊的1抹掉,
    res++;
    }
    return res;
}

2、

int NumberOf1(int n)
{
    int res=0;
    while(n!=0)
    {
    n-=n&(~n+1)//這對與方法1相似,都是將最右側(cè)的1抹掉
    res++;
    }
    return res;
}

3、來個效率特別高的

int NumberOf1(int n)
{
     n=(n& 0x55555555)+((n>>1)&0x55555555);
     n=(n& 0x33333333)+((n>>2)&0x33333333);
     n=(n& 0x0f0f0f0f)+((n>>4)&0x0f0f0f0f);
     n=(n& 0x00ff00ff)+((n>>8)&0x00ff00ff);
     n=(n& 0x0000ffff)+((n>>16)&0x0000ffff);
     return n;
}

最后再附上一個拿python實現(xiàn)的

class Solution:
    def NumberOf1(self, n):
        count = 0
        if n >= 0:
            s = bin(n)[2:]
        else:
            s = bin(pow(2,32)+n)[2:]
        for i in s:
            if i=='1':
                count+=1
        return count

這是一些基本知識,了解一下,有助于位運算符的理解


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (一)、進制之間的轉(zhuǎn)換 八進制:0-7 十六進制:0-F 1、十進制 與 二進制之間的轉(zhuǎn)換 (1)、十進制轉(zhuǎn)換為二...
    MPPC閱讀 22,216評論 2 49
  • 1. 二進制 <=> 十進制 二進制 轉(zhuǎn) 十進制eg: 10101.01 => 21.25計算方式: 1 ...
    Change_yourself閱讀 8,076評論 0 1
  • 簡介 關(guān)于進制,我們平時接觸的最多的就是十進制,用于計數(shù)。除了常用十進制,比較常用的還有跟時間相關(guān)的進制,比如七進...
    高鴻祥閱讀 4,822評論 0 4
  • 進位制/位置計數(shù)法是一種記數(shù)方式,故亦稱進位記數(shù)法/位值計數(shù)法,可以用有限的數(shù)字符號代表所有的數(shù)值。可使用數(shù)字符號...
    zllylgw閱讀 2,507評論 0 0
  • 人就像彈簧壓得越低,跳得越高。 人生一世,總不是順風(fēng)順水,一帆風(fēng)順,總是要有低谷和高潮,總是要受到...
    予象閱讀 593評論 0 1

友情鏈接更多精彩內(nèi)容