3950. 恰好一对连续置位
题目描述
给你一个整数 n 。
如果其二进制表示中 恰好 仅包含 一对 连续的置位 ,则返回 true ,否则返回 false 。
整数中的 置位 是指其 二进制 表示中的 1 。
示例 1:
输入: nums = 6
输出: true
解释:
- 6 的二进制表示为
110。 - 恰好存在一对连续的置位(
"11")。因此,答案为true。
示例 2:
输入: nums = 5
输出: false
解释:
- 5 的二进制表示为
101。 - 不存在连续的置位。因此,答案为
false。
提示:
0 <= n <= 105
解法
方法一:模拟
我们用一个变量 \(\textit{pre}\) 记录上一个位的数字,初始时 \(\textit{pre} = 0\),用另一个变量 \(\textit{vis}\) 记录是否已经找到一对连续置位,初始时 \(\textit{vis} = \text{false}\)。
遍历 \(n\) 的每个二进制位,记当前二进制位为 \(\textit{cur}\)。如果 \(\textit{pre} = \textit{cur} = 1\),此时如果 \(\textit{vis} = \text{true}\),说明存在多对连续置位,直接返回 \(\text{false}\),否则我们将 \(\textit{vis}\) 置为 \(\text{true}\)。然后我们更新 \(\textit{pre} = \textit{cur}\),继续遍历下个二进制位。
遍历结束后,如果 \(\textit{vis} = \text{true}\),返回 \(\text{true}\),否则返回 \(\text{false}\)。
时间复杂度 \(O(\log n)\),空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |