面试题 05.03. 翻转数位

题目

给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。

示例1:

1
2
输入: num = 1775(110111011112)
输出: 8

示例2:

1
2
输入: num = 7(01112)
输出: 4

解法

解法一:

递归建树

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
public int reverseBits(int num) {
int maxLen = 0, preLen = 0, curLen = 0, bits = 32;
while (bits-- > 0) {
if ((num & 1) == 0) {
curLen -= preLen;
preLen = curLen + 1;
}
curLen++;
maxLen = Math.max(maxLen, curLen);
num >>= 1;
}
return maxLen;
}
0%