经典算法实例应用:交替位二进制数(二)

发布时间:2026/7/17 17:12:25
经典算法实例应用:交替位二进制数(二) 接上文与大家分享另一种解题思路方法二位运算思路对输入 n 的二进制表示右移一位后得到的数字再与 n 按位异或得到 a。当且仅当输入 n 为交替位二进制数时a 的二进制表示全为 1不包括前导 0。这里进行简单证明当 a 的某一位为 1 时当且仅当 n 的对应位和其前一位相异。当 a 的每一位为 1 时当且仅当 n 的所有相邻位相异即 n 为交替位二进制数。将 a 与 a1 按位与当且仅当 a 的二进制表示全为 1 时结果为 0 。这里进行简单证明当且仅当 a 的二进制表示全为 1 时a1 可以进位并将原最高位置为 0 按位与的结果为 0 。否则不会产生进位两个最高位都为 1 相与结果不为 0 。结合上述两步可以判断输入是否为交替位二进制数。代码Python3class Solution: def hasAlternatingBits(self, n: int) - bool: a n ^ (n 1) return a (a 1) 0Javaclass Solution { public boolean hasAlternatingBits(int n) { int a n ^ (n 1); return (a (a 1)) 0; } }C#public class Solution { public bool HasAlternatingBits(int n) { int a n ^ (n 1); return (a (a 1)) 0; } }Cclass Solution { public: bool hasAlternatingBits(int n) { long a n ^ (n 1); return (a (a 1)) 0; } };Cbool hasAlternatingBits(int n) { long a n ^ (n 1); return (a (a 1)) 0; }Golangfunc hasAlternatingBits(n int) bool { a : n ^ n1 return a(a1) 0 }JavaScriptvar hasAlternatingBits function(n) { const a n ^ (n 1); return (a (a 1)) 0; };复杂度分析时间复杂度O(1) 。仅使用了常数时间来计算。空间复杂度O(1) 。使用了常数空间来存储中间变量。