劍指 Offer 15. 二進位制中1的個數
劍指 Offer 15. 二進位制中1的個數
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof
著作權歸領釦網路所有。
請實現一個函式,輸入一個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。
示例 1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 ‘1’。
示例 2:
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進位制串 00000000000000000000000010000000 中,共有一位為 ‘1’。
示例 3:
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為 ‘1’。
n & 1 加 n >> 1
//時間複雜度 O(n) = log n,即n轉化為二進指的位數
//第一版
int hammingWeight(uint32_t n) {
uint32_t count = 0;
while (n) {
if (n & 1) {
count++;
}
n = n >> 1;
}
return count;
}
// 簡潔版
int hammingWeight(uint32_t n) {
uint32_t count = 0;
while (n) {
count += n & 1;
n = n >> 1;
}
return count;
}
計數 且 n & = n - 1
//這個複雜度取決與 n中1的個數
int hammingWeight(uint32_t n) {
uint32_t count = 0;
while (n) {
count += 1;
n &= n-1;
}
return count;
}
相關文章
- 【劍指offer】二進位制中1的個數
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- 二進位制中1的個數
- offer通過--10二進位制中統計1的個數-2
- 1. 二位陣列中的查詢(劍指offer)陣列
- JZ-011-二進位制中 1 的個數
- 【刷演算法】二進位制中1的個數演算法
- 【劍指offer】【1】二維陣列中的查詢陣列
- 【劍指 Offer 】17. 列印從1到最大的n位數
- 劍指offer | 17. 列印從1到最大的n位數
- 劍指 Offer 列印從1到最大n位數c++C++
- 劍指 Offer 44. 數字序列中某一位的數字
- 劍指Offer-31-最小的K個數
- 二進位制求5個1的格式。。。。
- 【劍指offer】二維陣列中的查詢陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 劍指 Offer 53 - II. 0~n-1中缺失的數字(二分法)1
- 劍指Offer積累-JZ1-二維陣列中的查詢陣列
- 劍指Offer 表示數值的字串字串
- 劍指 offer(1) -- 陣列篇陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- 根據數字二進位制下 1 的數目排序排序
- 劍指offer——連結串列中倒數第k個結點
- 1417 二進位制數的大小
- 劍指Offer--陣列中重複的數字陣列
- 劍指OFFER
- 劍指offer——重建二叉樹二叉樹
- 二維陣列中的查詢——牛客劍指offer陣列
- 劍指 Offer 04. 二維陣列中的查詢陣列
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 知多一點二進位制中的負數
- 負數的二進位制數問題
- 輸出二進位制數
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 【Algorithm】《劍指offer》面試題32----從1到n整數中1出現的次數Go面試題