给定一个32位整数 num
,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112)
输出: 8
示例 2:
输入: num = 7(01112)
输出: 4
p
表示当前最多连续 1 的个数,last
表示上次最多连续 1 的个数。遍历每一位,如果为 1,则 p
递增;否则重置 last
为 p
,并将 p
设为 0,表示重新开始计 1。
class Solution {
public int reverseBits(int num) {
int p = 0, last = 0, ans = 1;
for (int i = 0; i < 32; i++) {
if ((num & (1 << i)) != 0) p++;
else {
last = p;
p = 0;
}
if (p + last + 1 > ans) ans = p + last + 1;
}
return ans > 32 ? 32 : ans;
}
}
这里新学到了一种遍历每一位的方式:
for (int i = 0; i < 32; i++)
int p = num & (1 << i);