日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果

發布時間:2024/4/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Reverse Bits

原題鏈接Reverse Bits

給定一個32位無符號整型數,將它的二進制逆序,返回結果

從字符串的角度觀察二進制逆序,只需要從兩端開始兩兩交換即可。當然,完全可以不將二進制轉為字符串,而是模擬字符串的逆序操作

代碼如下

class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res = 0;uint32_t first = (1 << 31);uint32_t last = 1;int diff = 31;while(first > last){res |= ((first & n) >> diff);res |= ((last & n) << diff);diff -= 2;first >>= 1;last <<= 1;}return res;} };

此外,利用std::bitset也可以解決本題

class Solution { public:uint32_t reverseBits(uint32_t n) {auto s = std::bitset<32>(n).to_string();std::reverse(s.begin(), s.end());return std::bitset<32>(s).to_ulong();} };

Number of 1 Bits

原題鏈接Number of 1 Bits

計算給定32位無符號整型數的二進制中1的個數,方法比較多

雖然本題明確指出n是無符號數,但是大多數問題中n都是可正可負

第一種方法,一位一位計算

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;/* 使用cnt作為循環次數的原因是n如果是負數,那么高位會全是1,導致無限循環 */int cnt = 32;while(cnt--){if(n & 1)++res;n >>= 1;}return res;} };

如果n是負數,之所以會造成死循環是因為改變了n的值,導致右移時高位補1而不是補0

第二種方法,不移動n

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;uint32_t flag = (1 << 32);while(flag){if(n & flag)++res;flag >>= 1;}return res;} };

第三種方法,不移動n

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;while(n){++res;n &= (n - 1);}return res;} };

最后一種方法,利用std::bitset

class Solution { public:int hammingWeight(uint32_t n) {return std::bitset<32>(n).count();} };

總結

以上是生活随笔為你收集整理的每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。