每日一题:leetcode191.位1的个数
生活随笔
收集整理的這篇文章主要介紹了
每日一题:leetcode191.位1的个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
題目分析
很自然地想到了二進制枚舉,直接循環檢查每一個二進制位。
class Solution { public:int hammingWeight(uint32_t n) {int ret = 0;uint32_t t = 1;for (int i = 0; i < 32; ++i, t <<= 1) {if (n & t) {++ret;}}return ret;} };AC之后看了一下題解,發現還有更妙的方法:使用一個trick:n&(n-1)的結果是把n的二進制位的最低位從1變為0。其實挺好理解的,因為n-1肯定會將最低位1變成0,并把之后所有位變為1,使用&操作以后就可以消除掉。
有了上面的技巧,我們只需要不斷地將n變為n&(n-1)
class Solution { public:int hammingWeight(uint32_t n) {int ret = 0;while(n) { //必須首先判斷n是否為0++ret;n &= (n - 1);}return ret;} };總結
以上是生活随笔為你收集整理的每日一题:leetcode191.位1的个数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子宫腺肌症能做微创吗
- 下一篇: 隋唐英雄传剧情介绍