LeetCode 每日一題 [48] 二進(jìn)制中1的個數(shù)

LeetCode 二進(jìn)制中1的個數(shù) [簡單]

請實(shí)現(xiàn)一個函數(shù),輸入一個整數(shù),輸出該數(shù)二進(jìn)制表示中 1 的個數(shù)。例如,把 9 表示成二進(jìn)制是 1001,有 2 位是 1。因此,如果輸入 9,則該函數(shù)輸出 2。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof

示例 1:

輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進(jìn)制串 00000000000000000000000000001011 中,共有三位為 '1'。

示例 2:

輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進(jìn)制串 00000000000000000000000010000000 中,共有一位為 '1'。

示例 3:

輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進(jìn)制串 11111111111111111111111111111101 中,共有 31 位為 '1'。

題目分析
解法1

先把數(shù)字轉(zhuǎn)換為二進(jìn)制,然后迭代計數(shù) 但是處理到 2 / 2 % 2 || 1==1 的時候就掛機(jī)了

解法2

使用Java的API return Integer.bitCount(n);

解法3

使用Java的API return Integer.toBinaryString(n).replaceAll("0", "").length();

解法4

逐位判斷 根據(jù) 與運(yùn)算 定義,設(shè)二進(jìn)制數(shù)字 nn ,則有:
若 n & 1 = 0n&1=0 ,則 nn 二進(jìn)制 最右一位 為 0 ;
若 n & 1 = 1n&1=1 ,則 nn 二進(jìn)制 最右一位 為 1 。
根據(jù)以上特點(diǎn),考慮以下 循環(huán)判斷 :
判斷 n 最右一位是否為 1 ,根據(jù)結(jié)果計數(shù)。
將 n 右移一位(本題要求把數(shù)字 nn 看作無符號數(shù),因此使用 無符號右移 操作)。

解法5

(n?1) 解析: 二進(jìn)制數(shù)字 n 最右邊的 1 變成 0 ,此 1 右邊的 0 都變成 1 。

n & (n - 1) 解析: 二進(jìn)制數(shù)字 n 最右邊的 1 變成 0 ,其余不變。
代碼實(shí)現(xiàn)
public class HammingWeight {
    public static void main(String[] args) {
        System.out.println(hammingWeight(255));
        System.out.println(hammingWeight1(255));
        System.out.println(hammingWeight2(255));
        System.out.println(hammingWeight3(255));
    }

    public static int hammingWeight3(int n) {
        int res = 0;
        while (n != 0) {
            res++;
            n &= n - 1;
        }
        return res;
    }

    public static int hammingWeight2(int n) {
        int res = 0;
        while (n != 0) {
            res += n & 1;
            n >>>= 1;
        }
        return res;
    }

    public static int hammingWeight1(int n) {
        return Integer.toBinaryString(n).replaceAll("0", "").length();
    }

    public static int hammingWeight(int n) {
        return Integer.bitCount(n);
    }
}

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

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