Difficulty: 简单
给定一个32位整数 num
,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
1
2
|
输入: num = 1775(110111011112)
输出: 8
|
示例 2:
1
2
|
输入: num = 7(01112)
输出: 4
|
Solution
Language: ****
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class Solution {
public:
void debug(vector<int> &f) {
int i = f.size()-1;
while(i>=0) printf("%d ",f[i--]);
}
int reverseBits(int num) {
if(num == 0) return 1;
vector<int> s;
for(int i=0;i<32;++i) {
s.push_back(num>>i & 1);
}
//if(s.size()<32) s.push_back(0);
debug(s);
// if(s.size() && s.back() ) s.push_back(0);
int k=1;
int maxLen = -1;
for(int i=0,n = s.size();i<n;++i) {
int cnt = k;
int j = i;
for( ;j<n;++j) {
if(s[j] == 0) {
//printf("\ncnt:=%d, j:= %d",cnt,j);
if(cnt==0) break;
cnt--;
}
}
maxLen = max(maxLen,j-i);
}
return maxLen;
}
};
|