算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。是以,為了提高大家的算法能力,這個公衆号後續每天帶大家做一道算法題,題目就從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:旋轉數組