当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode 面试题 05.03. 翻转数位

来自网友在路上 182882提问 提问时间:2023-09-25 00:42:33阅读次数: 82

最佳答案 问答题库828位专家为你答疑解惑

文章目录

  • 一、题目
  • 二、Java 题解

一、题目

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

示例 1:

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

示例 2:

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

  点击此处跳转题目。

二、Java 题解

  p 表示当前最多连续 1 的个数,last 表示上次最多连续 1 的个数。遍历每一位,如果为 1,则 p 递增;否则重置 lastp,并将 p 设为 0,表示重新开始计 1。

class Solution {public int reverseBits(int num) {int p = 0, last = 0, ans = 1;for (int i = 0; i < 32; i++) {if ((num & (1 << i)) != 0) p++;else {last = p;p = 0;}if (p + last + 1 > ans) ans = p + last + 1;}return ans > 32 ? 32 : ans;}
}
  • 时间:0 ms,击败 100.00% 使用 Java 的用户
  • 内存:36.98 MB,击败 90.63% 使用 Java 的用户

  这里新学到了一种遍历每一位的方式:

for (int i = 0; i < 32; i++) int p = num & (1 << i);
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode 面试题 05.03. 翻转数位":http://eshow365.cn/6-13107-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!