切換
舊版
前往
大廳
主題

LeetCode - 191. Number of 1 Bits 解題心得

Not In My Back Yard | 2020-09-05 00:00:03 | 巴幣 2 | 人氣 259

題目連結:


題目意譯:
撰寫一個函式,可以接收一個無號整數並回傳其二進位表示法中的 1 之數量(也被稱為漢明重量(Hamming Weight))。

注:
注意,某些程式語言像是 Java,並沒有所謂的無號整數型態。在這樣的狀況下,輸入及輸出都會是有號整數,而且應當不會影響你的實作,因為無論將給定字串視作有號或無號皆是同樣的表示法。
在 Java 中,編譯器使用 2 補數來表示有號整數。因此,在範例 3 中,輸入代表有號整數 -3 。

進階:
如果此函式會被呼叫很多次,你會怎麼最佳化它呢?



範例測資:
範例 1:
輸入: 00000000000000000000000000001011
輸出: 3
解釋: 輸入的二元字串 00000000000000000000000000001011 總共有 3 個「1」的位元。

範例 2:
輸入: 00000000000000000000000010000000
輸出: 1
解釋: 輸入的二元字串 00000000000000000000000010000000 總共有 1 個「1」的位元。

範例 3:
輸入: 11111111111111111111111111111101
輸出: 31
解釋: 輸入的二元字串 11111111111111111111111111111101 總共有 31 個「1」的位元。


解題思維:
直接跑過每個位元算固然可以,但是實際上運算量可以壓得更低。

利用昨天的題目之精神——即位元運算,再加上將位元本身作為答案儲存的地方。詳細的範例看維基十分足夠,而且條目中列出了不少的相異解法。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作