425,劍指 Offer 二進位制中1的個數

2021-10-09 14:26:33 字數 3533 閱讀 4442

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。

例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。

示例 1:

輸入:00000000000000000000000000001011

輸出:3

解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 『1』。

示例 2:

輸入:00000000000000000000000010000000

輸出:1

解釋:輸入的二進位制串 00000000000000000000000010000000 中,共有一位為 『1』。

示例 3:

輸入:11111111111111111111111111111101

輸出:31

解釋:輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為 『1』。

二進位制中1的個數這道題是劍指offer上的一道題,其實比較簡單,但要寫10種以上的解法估計不容易,之前專門分3個系列講過二進位制中1的個數

364,位1的個數系列(一)

385,位1的個數系列(二)

402,位1的個數系列(三)

1,把n往右移32次,每次都和1進行與運算

public

inthammingweight

(int n)

}return count;

}

2,原理和上面一樣,做了一點優化

public

inthammingweight

(int n)

return count;

}

3,1每次往左移一位,再和n進行與運算

public

inthammingweight

(int n)

}return count;

}

4,1每次往左移一位,把運算的結果在右移判斷是否是1

public

inthammingweight

(int i)

return count;

}

5,這個是最常見的,每次消去最右邊的1,直到消完為止

public

inthammingweight

(int n)

return count;

}

6,把上面的改為遞迴

public

inthammingweight

(int n)

7,查表

public

inthammingweight

(int i)

;int count =0;

while

(i !=0)

return count;

}

8,每兩位儲存,使用加法(先運算再移位)

public

inthammingweight

(int n)

9,每兩位儲存,使用加法(先移位再運算)

public

inthammingweight

(int n)

10,和第8種思路差不多,只不過在最後幾行計算的時候過濾的比較乾淨

public

inthammingweight

(int n)

11,每4位儲存,使用加法

public

inthammingweight

(int n)

12,每3位儲存,使用加法

public

inthammingweight

(int n)

13,每5位儲存,使用加法

public

inthammingweight

(int n)

14,每兩位儲存,使用減法(先運算再移位)

public

inthammingweight

(int i)

15,每3位儲存,使用減法

public

inthammingweight

(int n)

16,每4位儲存,使用減法

public

inthammingweight

(int n)

17,每5位儲存,使用減法

public

inthammingweight

(int n)

18,每次消去最右邊的1,可以參照第5種解法

public

static

inthammingweight

(int num)

return total;

}

總結這題如果一直寫下去,再寫10種也沒問題,如果上面的**你都能看懂,你也會有和我一樣的想法。但解這題的最終思路還是沒變,所以再寫下去也沒有太大價值。上面有些寫法其實也很雞肋,這裡只是告訴大家這樣寫也是可以實現的,雖然可能你永遠都不這樣去寫。

劍指Offer 擴充套件 二進位制 小公尺

世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位 bit 不同麼?輸入例子 1999 2299 輸出例子 7 分析 將兩個整數逐位進行比較,累加不同位的個數,直至兩個數都為0.比較兩個數的最後一位,然後分別右移一位,直至兩個數都為0.defin...

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

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。1 可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...

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

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。錯誤解法 public class solution return num 若輸入的數字為負數,因為為補碼表示方式,所以高位一直是1,所以會陷入死迴圈。方法一 從高位開始計算 public class solution return ...