📖本篇内容: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 <=
📝思路📝
本题考查知识点
- 思路:简单模拟/位运算
- 模拟的话,可以算出二进制的每一位然后逐位比较,这是比较清晰的一种遍历解法。
- 这里不再赘述位运算的思路了,其它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()
- 空间复杂度: O()
位运算
class Solution {
public boolean hasAlternatingBits(int n) {
int x = n ^ (n >> 1);
return (x & (x + 1)) == 0;
}
}
- 时间复杂度: O()
- 空间复杂度: O()
运行结果
遍历
位运算
🙊写在最后🙊
2022- 3- 28今天小付打卡了哦~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼