文章目录本篇内容:Leetcode每日一题 693. 交替位二进制数 简单模拟/位运算
文章专栏:leetcode每日一题《打卡日常》
最近更新:2022 年 3 月 26日 Leetcode每日一题 682. 棒球比赛 xdm打棒球么 栈看了都摇头~
⭐算法仓库:小付的算法之路——Alascanfu-algorithm.git.io
个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
点赞 收藏 ⭐留言 一键三连 关爱程序猿,从你我做起
写在前面题目
提示思路⭐代码实现⭐运行结果 写在最后
写在前面最近比较忙,所以更的有点晚~
题目给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例1:
输入:n = 5 输出:true 解释:5 的二进制表示是:101
示例2:
输入:n = 7 输出:false 解释:7 的二进制表示是:111.
示例3:
输入:n = 11 输出:false 解释:11 的二进制表示是:1011.提示
1 <= n <= 2 31 − 1 2^{31} - 1 231−1 思路
本题考查知识点
思路:简单模拟/位运算模拟的话,可以算出二进制的每一位然后逐位比较,这是比较清晰的一种遍历解法。这里不再赘述位运算的思路了,其它uu讲的很清楚了。 ⭐代码实现⭐
遍历
class Solution {
public boolean hasAlternatingBits(int n) {
StringBuilder str = new StringBuilder();
while(n > 0){
str.append(n%2);
n/=2;
}
String s = str.toString();
for (int i = 0 ;i < s.length()-1;i++){
if (s.charAt(i) == s.charAt(i+1))return false;
}
return true;
}
}
时间复杂度: O( l o g 2 n log_2n log2n)空间复杂度: O( 1 1 1)
位运算
class Solution {
public boolean hasAlternatingBits(int n) {
int x = n ^ (n >> 1);
return (x & (x + 1)) == 0;
}
}
时间复杂度: O( 1 1 1)空间复杂度: O( 1 1 1) 运行结果
遍历
位运算
2022- 3- 28今天小付打卡了哦~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼



