当前位置: 面试刷题>> 具有交替位的二进制数 (经典算法题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 ``` **码小课网站中有更多相关内容分享给大家学习**,包括但不限于算法题解、数据结构、编程技巧等,欢迎访问学习。
推荐面试题