首页 > 代码库 > LeetCode 191 Number of 1 Bits
LeetCode 191 Number of 1 Bits
Problem:
Write a function that takes an unsigned integer and returns the number of ’1‘ bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11‘ has binary representation 00000000000000000000000000001011
, so the function should return 3.
Summary:
求三十二位无符号数含1的位数。
Analysis:
1. 最简单的思路为将n移位直至n为0,每移位一次判断最低位是否为1。但若有1在最高位则需移位32次,效率太低。
1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 int cnt = 0; 5 while (n) { 6 cnt += n & 1; 7 n = n >> 1; 8 } 9 10 return cnt; 11 } 12 };
2. 下面这种思路能够把移位的次数降低至与含1的位数相等,大大提高了效率。
举个栗子:若n = 1010010,则:
- n = 1010010 n - 1 = 1010001 n & (n - 1) = 1010000
- n = 1010000 n - 1 = 1001111 n & (n - 1) = 1000000
- n = 1000000 n - 1 = 0111111 n & (n - 1) = 0000000
可以看出,每进行一次n & (n - 1)操作,最低位上的1就会被消去。
1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 int cnt = 0; 5 while (n) { 6 n &= (n - 1); 7 cnt++; 8 } 9 10 return cnt; 11 } 12 };
LeetCode 191 Number of 1 Bits
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。