提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112) 输出: 8 示例 2:
输入: num = 7(01112) 输出: 4
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-bits-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题过程
解题思路
动态规划:count用来统计连续的1的个数,insert用来统计将一个0变成1的连续1的个数,max用来记录最大的连续1的个数(包括0变1在内)。
class Solution {
public int reverseBits(int num) {
int count = 0;
int max = Integer.MIN_VALUE;
int insert = 0;
for (int i = 0; i < 32; i++) {
if ((num & (1 << i)) != 0){
count++;
insert++;
}else {
insert = count + 1;
count = 0;
}
max = Math.max(max, insert);
}
return max;
}
}
总结
|