LeetCode 868. 二进制间距
2018-07-17 12:37
357 查看
最近刷LeetCode题目的一些思路,题目信息
给定一个正整数
N,找到并返回
N的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回
0。
示例 1:
[code]输入:22 输出:2 解释: 22 的二进制是 0b10110 。 在 22 的二进制表示中,有三个 1,组成两对连续的 1 。 第一对连续的 1 中,两个 1 之间的距离为 2 。 第二对连续的 1 中,两个 1 之间的距离为 1 。 答案取两个距离之中最大的,也就是 2 。
示例 2:
[code]输入:5 输出:2 解释: 5 的二进制是 0b101 。
示例 3:
[code]输入:6 输出:1 解释: 6 的二进制是 0b110 。
示例 4:
[code]输入:8 输出:0 解释: 8 的二进制是 0b1000 。 在 8 的二进制表示中没有连续的 1,所以返回 0 。
提示:
1 <= N <= 10^9
--------------------------------------------------------------------------------------
题目很明确,就是计算二进制位为1的最大间隔,先看下我用的笨方法,直接用给定的数据除以2的N次方,然后取余
public int binaryGap(int N) { int retData = 0; int lastNumber = 0; int currentNumber = 0; boolean start = false; int number = (int)Math.pow(2,30); while (number >= 2){ if(N/number > 0){ if(start){ retData = Math.max(lastNumber,currentNumber); currentNumber = 1; lastNumber = retData; } else { start = true; currentNumber++; } } else { if(start){ currentNumber++; } } N %= number; number /=2; } return retData; }
--------------------------------------------------------------------------------------
下面是别人的用位操作实现的,代码更简洁、易读
public int binaryGap(int N) { int dist = 0, pre = -1; for (int i = 0; i < 32; i++) { if ((N & (1 << i)) != 0) { if (pre != -1) dist = Math.max(dist, i - pre); pre = i; } } return dist; }阅读更多
相关文章推荐
- leetcode_461. Hamming Distance 计算汉明距离,按位异或运算,计算整数的二进制表示中1的个数 java
- LeetCode Add Binary(二进制加法)
- leetcode 190. Reverse Bits-二进制翻转|位运算
- leetcode解题之191 # Number of 1 Bits Java版 (整数对应的二进制中1的个数)
- [LeetCode]Palindrome Number 判断二进制和十进制是否为回文
- leetcode解题之485. Max Consecutive Ones Java版 (二进制连续最长1的个数)
- LeetCode 67. Add Binary (二进制相加)
- Leetcode-190 Reverse Bits 数字二进制倒置
- leetcode -- 67. Add Binary【统一形式简化代码+双指针 + 二进制规则 + 字符数字转换】
- 【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
- LeetCode 29. Divide Two Integers 二进制分解
- 每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果
- leetcode-338. Counting Bits 统计十进制数字的二进制表示中1的个数,列表的定义,奇偶判断
- LeetCode——476. Number Complement(二进制,C++)
- LeetCode | 762. Prime Number of Set Bits in Binary Representation 简单题 二进制技巧题
- leetcode_401(二进制表)
- LeetCode 67 Add Binary(二进制相加)(*)
- LeetCode 67. Add Binary(二进制加法)
- Leetcode:191. Number of 1 Bits(返回一个数字对应二进制中1的个数)
- leetcode实现 “10001”+“1011” 返回二进制相加的结果