当前位置: 面试刷题>> 具有交替位的二进制数 (经典算法题500道)
### 题目描述补充
**题目:具有交替位的二进制数**
给定一个正整数 `n`,请编写一个函数来找出并返回所有小于或等于 `n` 的正整数,这些整数的二进制表示具有交替出现的 0 和 1(即,从最高有效位到最低有效位,没有相邻的两位是相同的)。
例如,给定 `n = 10`,二进制表示为 `1010` 的 `5` 和二进制表示为 `101` 的 `5`(注意:在二进制中,我们通常不包括前导零,但这里的描述是为了清晰)是符合要求的。然而,二进制表示为 `110` 的 `6` 和 `100` 的 `4` 不符合要求,因为它们包含相邻的相同位。
### 示例代码
#### PHP 示例
```php
function findAlternatingBits($n) {
$result = [];
for ($i = 1; $i <= $n; $i++) {
$binary = decbin($i); // 将十进制转换为二进制字符串
$isValid = true;
for ($j = 1; $j < strlen($binary) - 1; $j++) {
if ($binary[$j] == $binary[$j + 1]) {
$isValid = false;
break;
}
}
if ($isValid) {
$result[] = $i;
}
}
return $result;
}
// 示例
echo implode(", ", findAlternatingBits(10)); // 输出: 1, 2, 5, 10
```
#### Python 示例
```python
def findAlternatingBits(n):
result = []
for i in range(1, n + 1):
binary = bin(i)[2:] # 将十进制转换为二进制字符串,并去掉前缀'0b'
if all(binary[j] != binary[j + 1] for j in range(len(binary) - 1)):
result.append(i)
return result
# 示例
print(", ".join(map(str, findAlternatingBits(10)))) # 输出: 1, 2, 5, 10
```
#### JavaScript 示例
```javascript
function findAlternatingBits(n) {
const result = [];
for (let i = 1; i <= n; i++) {
const binary = i.toString(2); // 将十进制转换为二进制字符串
let isValid = true;
for (let j = 1; j < binary.length - 1; j++) {
if (binary[j] === binary[j + 1]) {
isValid = false;
break;
}
}
if (isValid) {
result.push(i);
}
}
return result;
}
// 示例
console.log(findAlternatingBits(10).join(', ')); // 输出: 1, 2, 5, 10
```
**码小课网站中有更多相关内容分享给大家学习**,包括但不限于算法题解、数据结构、编程技巧等,欢迎访问学习。