???????📝個人主頁:五敷有你? ? ??
?🔥系列專欄:算法分析與設計
??穩中求進,曬太陽
題目
編寫一個函數,輸入是一個無符號整數(以二進制串的形式),返回其二進制表達式中數字位數為 '1' 的個數(也被稱為漢明重量)。
示例
示例 1:
輸入:n = 00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011?中,共有三位為 '1'。
示例 2:
輸入:n = 00000000000000000000000010000000 輸出:1 解釋:輸入的二進制串 00000000000000000000000010000000?中,共有一位為 '1'。
示例 3:
輸入:n = 11111111111111111111111111111101 輸出:31 解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1'
思路
們可以直接循環檢查給定整數 nnn 的二進制位的每一位是否為 111。
具體代碼中,當檢查第i位時,我們可以讓 n 與 1左移i位? 進行與運算,當且僅當 n 的第 i 位為 1 時,運算結果不為 0。然后++
實現代碼
public class Solution {public int hammingWeight(int n) {int ret = 0;for (int i = 0; i < 32; i++) {if ((n & (1 << i)) != 0) {ret++;}}return ret;}
}
運行結果
時間復雜度O(n)
空間復雜度O(1)