天天看點

​LeetCode刷題實戰191:位1的個數

算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。是以,為了提高大家的算法能力,這個公衆号後續每天帶大家做一道算法題,題目就從LeetCode上面選 !

今天和大家聊的問題叫做 位1的個數,我們先來看題面:

https://leetcode-cn.com/problems/number-of-1-bits/

Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight).

題意

編寫一個函數,輸入是一個無符号整數(以二進制串的形式),傳回其二進制表達式中數字位數為 '1' 的個數(也被稱為漢明重量)。

提示:

請注意,在某些語言(如 Java)中,沒有無符号整數類型。在這種情況下,輸入和輸出都将被指定為有符号整數類型,并且不應影響您的實作,因為無論整數是有符号的還是無符号的,其内部的二進制表示形式都是相同的。

在 Java 中,編譯器使用二進制補碼記法來表示有符号整數。是以,在上面的 示例 3 中,輸入表示有符号整數 -3。

示例

示例 1:

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

示例 2:

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

示例 3:

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

解題

這題直接采用位運算,以及數的移位來做。C++代碼如下:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int count = 0;
        for(int i = 0; i < 32; i++) {
            if(n & 1 == 1) {
                count += 1;
            }
            n = n >> 1;
        }
        return count;
    }
};
           

好了,今天的文章就到這裡,如果覺得有所收獲,請順手點個在看或者轉發吧,你們的支援是我最大的動力 。

上期推文:

LeetCode1-180題彙總,希望對你有點幫助!

LeetCode刷題實戰181:超過經理收入的員工

LeetCode刷題實戰182:查找重複的電子郵箱

LeetCode刷題實戰183:從不訂購的客戶

LeetCode刷題實戰184:部門工資最高的員工

LeetCode刷題實戰185:部門工資前三高的所有員工

LeetCode刷題實戰186:翻轉字元串裡的單詞 II

LeetCode刷題實戰187:重複的DNA序列

LeetCode刷題實戰188:買賣股票的最佳時機 IV

LeetCode刷題實戰189:旋轉數組

​LeetCode刷題實戰191:位1的個數