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

📅 2026/7/17 11:14:42
经典算法实例应用:交替位二进制数(一)
我们先来看题目描述给定一个正整数检查它的二进制表示是否总是 0、1 交替出现换句话说就是二进制表示中相邻两位的数字永不相同。示例 1输入n 5 输出true 解释5 的二进制表示是101示例 2输入n 7 输出false 解释7 的二进制表示是111.示例 3输入n 11 输出false 解释11 的二进制表示是1011.提示1 n 231 - 1解决方案方法一模拟思路从最低位至最高位我们用对 2 取模再除以 2 的方法依次求出输入的二进制表示的每一位并与前一位进行比较。如果相同则不符合条件如果每次比较都不相同则符合条件。代码Python3class Solution: def hasAlternatingBits(self, n: int) - bool: prev 2 while n: cur n % 2 if cur prev: return False prev cur n // 2 return TrueJavaclass Solution { public boolean hasAlternatingBits(int n) { int prev 2; while (n ! 0) { int cur n % 2; if (cur prev) { return false; } prev cur; n / 2; } return true; }Cclass Solution { public: bool hasAlternatingBits(int n) { int prev 2; while (n ! 0) { int cur n % 2; if (cur prev) { return false; } prev cur; n / 2; } return true; } };C#define MAX(a, b) ((a) (b) ? (a) : (b)) int maxConsecutiveChar(const char * answerKey, int k, char ch) { int n strlen(answerKey); int ans 0; for (int left 0, right 0, sum 0; right n; right) { sum answerKey[right] ! ch; while (sum k) { sum - answerKey[left] ! ch; } ans MAX(ans, right - left 1); } return ans; } int maxConsecutiveAnswers(char * answerKey, int k) { int cnt1 maxConsecutiveChar(answerKey, k, T); int cnt2 maxConsecutiveChar(answerKey, k, F); return MAX(cnt1, cnt2); }复杂度分析时间复杂度O(logn) 。输入 n 的二进制表示最多有 O(logn) 位。空间复杂度O(1) 。使用了常数空间来存储中间变量。