面试题 05.03. 翻转数位

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;
    }
};