题目描述
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112)
输出: 8
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-bits-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++
class Solution {
public:
//利用 n&1可以判奇偶性这个性质以及后移
//只能一次将1变为0;
//记录每次翻转后的长度
int reverseBits(int num) {
int res=0; //返回值
int count=0; //全是1的字串的长度
int last_count=0; //上次遇到的0翻转后的长度
int bit=32; //技巧
while(bit-->0){
if((num&1)==0){
count=count-last_count; //再次翻转时减去上次翻转的长度;
last_count=count+1;
}
count++;
num=num>>1;
res=max(res,count);
}
return res;
}
};
该博客主要介绍了LeetCode面试题05.03翻转数位的问题,内容包括问题描述及C++解决方案。给定一个32位整数num,目标是找到通过翻转数位能形成的最长连续1的序列。例如,输入1775(110111011112),最长连续1的序列长度为8。
438

被折叠的 条评论
为什么被折叠?



