1.トピックの紹介
32ビットの整数numを指定すると、桁を0から1に変更できます。あなたが得ることができる1の最も長い文字列の長さを見つけるためにプログラムを書いてください。
例1:
入力:num = 1775(110111011112)
出力:8
例2:
入力:num = 7(01112)
出力:4
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/reverse-bits-lcci
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2つの問題解決のアイデア
この質問では、ビット演算を使用して、0桁の前の1の数と、0桁の後の1の数を計算し、最大値を記録します。詳細については、コードを参照してください。
3つの問題解決コード
class Solution {
public:
//计算0位前面的长度和后面的长度,
int reverseBits(int num) {
int ans = 0;
int pre = 0;
int ctn = 0;
while(num)
{
if(num & 1) //当某一位为1时,长度计数加1
ctn++;
else
{
//当某一位为0时,保存当前最大的长度,并更新0位前面的长度,重新记录0位后面的长度
ans = max(ans, ctn + pre + 1);
pre = ctn;
ctn = 0;
}
num >>= 1;
}
ans = max(ans, ctn + pre + 1);
return ans;
}
};