当前位置: 面试刷题>> 具有交替位的二进制数 (经典算法题500道)


题目描述补充

题目:具有交替位的二进制数

给定一个正整数 n,请编写一个函数来找出并返回所有小于或等于 n 的正整数,这些整数的二进制表示具有交替出现的 0 和 1(即,从最高有效位到最低有效位,没有相邻的两位是相同的)。

例如,给定 n = 10,二进制表示为 10105 和二进制表示为 1015(注意:在二进制中,我们通常不包括前导零,但这里的描述是为了清晰)是符合要求的。然而,二进制表示为 11061004 不符合要求,因为它们包含相邻的相同位。

示例代码

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 示例

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 示例

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

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法题解、数据结构、编程技巧等,欢迎访问学习。

推荐面试题