一、題目大意
撰寫一個函式,輸入是一個無符號整數(以二進制串的形式),回傳其二進制運算式中數字位數為 '1' 的個數(也被稱為漢明重量),
提示:
請注意,在某些語言(如 Java)中,沒有無符號整數型別,在這種情況下,輸入和輸出都將被指定為有符號整數型別,并且不應影響您的實作,因為無論整數是有符號的還是無符號的,其內部的二進制表示形式都是相同的,
在 Java 中,編譯器使用二進制補碼記法來表示有符號整數,因此,在上面的 示例 3 中,輸入表示有符號整數 -3,
示例 1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1',
示例 2:
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位為 '1',
示例 3:
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1',
提示:
- 輸入必須是長度為 32 的 二進制串 ,
進階:
- 如果多次呼叫這個函式,你將如何優化你的演算法?
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/number-of-1-bits
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
二、解題思路
思路1:n & 1如果為1,ans=ans+1,然后再n向右移一位,直到n=0,回傳ans,注意:因為是Java實作所以要用for
思路2:先判斷如果n!=0,ans++,令n = n&(n-1),回圈直到n=0,回傳ans,參考別人的思路,沒看懂
三、解題方法
3.1 Java實作 - 思路1
public class Solution2 {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int ans = 0;
for (int i = 0; i < 32; i++) {
ans += n & 1;
n >>= 1;
}
return ans;
}
}
3.2 Java實作 - 思路2
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int ans = 0;
while (n != 0) {
ans++;
n = n & (n - 1);
}
return ans;
}
}
四、總結小記
- 2011/10/24 有些東西想不明白,就埋藏心底,發酵一會
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/519161.html
標籤:其他
