面试题 05.03. 翻转数位

题目来源:

        leetcode题目,网址:面试题 05.03. 翻转数位 - 力扣(LeetCode)

解题思路:

        首先,获得所给数字连续数位情况,然后遍历数位情况,获得翻转 1 个 1 所能得到的最长连续 1 个数。

解题代码:

class Solution {
public:
    int reverseBits(int num) {
        vector> res;  //res[0]需要跳过 res[i][0]表示 0 还是 1,res[i][1]第二维为计数
        res.push_back({-1,-1});
        int pos=0;
        int cnt=0;     
        while(num!=0){
            int bit=num&1;
            num=(unsigned int)num>>1;
            if(bit==res[pos][0]){
                res[pos][1]++;
            }else{
                pos++;
                res.push_back({bit,1});
            }
            cnt++;
        }
        if(cnt!=32)
            res.push_back({0,32-cnt});
        int resNum=0;
        for(int i=1;i=1){
                        thisMax+=res[i-1][1];
                    }
                    if(i+1=1){
                        resNum=max(res[i-1][1]+1,resNum);
                    }
                    if(i+1

总结:

        写的有点复杂, 可以通过多个变量在循环结束后就获得答案。

        无官方题解。


你可能感兴趣的:(#,C++,LeetCode,C++)