给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112)
输出: 8
示例 2:
输入: num = 7(01112)
输出: 4
方法是真的巧妙 其中count代表的就是连续的1的个数,len是代表能够取到的包括改一位之后连续1的值
- 当这一位是1的时候 count和len都++
- 但是当这一位是0的时候 此时的len=count+1 相当于将前面连续的1的位数加上这一位是0的位数算上了 然后count置为0 其实就相当于是将两段的连续1连接起来了
public int reverseBits(int num) {
int count = 0;
int ans= 1;
int len = 0;
//这个方法是真的巧妙 其中count代表的就是连续的1的个数 len是代表能够取到的包括改一位之后连续1的值
//当这一位是1的时候 count和len都++
//但是当这一位是0的时候 此时的len=count+1 相当于将前面连续的1的位数加上这一位是0的位数算上了 然后count置为0 其实就相当于是将两段的连续1连接起来了
for(int i=0;i<32;i++){
if((num &(1<<i))!=0){
count++;
len++;
}else{
len = count+1;
count=0;
}
ans = Math.max(ans,len);
}
return ans;
}