LeetCode- 翻转数位

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode- 翻转数位相关的知识,希望对你有一定的参考价值。

面试题.翻转数位

题目描述

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

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

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

算法思路

每次维护三个变量:
cur:当前位置为止连续1的个数,遇到0归零,遇到1加1
insert:在当前位置变成1,往前数连续1的最大个数,遇到0变为cur+1,遇到1加1
res:保存insert的最大值即可.

Python

class Solution(object):
    def reverseBits(self, num):
        """
        :type num: int
        :rtype: int
        """
        cur = 0
        insert = 0
        res = 1
        for i in range(32):
            if num & (1<<i):
               cur += 1
               insert +=1
            else:
                insert = cur + 1
                cur = 0
            res = max(res,insert)
        return res

Java

class Solution {
    public int reverseBits(int num) {
        int cur = 0, insert = 0, res = 1;
        for (int i=0; i < 32; i++) {
             if ((num & 1) == 1) {
                cur++;
                insert++;
            } else {
                insert = cur+1;
                cur = 0;
            }
            res = Math.max(res, insert);
            num >>= 1;
        }
        return res;
    }
}

加油!

感谢!

努力!

以上是关于LeetCode- 翻转数位的主要内容,如果未能解决你的问题,请参考以下文章

leetcode7 整数翻转(对于整数数位操作的简洁算法)

面试题 05.03. 翻转数位一般DP

kotlin-从一个片段更改多个片段的小数位

片段(Java) | 机试题+算法思路+考点+代码解析 2023

算法: 翻转整数位190. Reverse Bits

9. 回文数