693. 交替位二进制数【简单题】【每日一题】

思路:【位运算】

  1. 排除特殊情况n=1,此时return true。
  2. 将n转为二进制字符串,依次将相邻两位数字进行异或运算。
  3. 异或运算的结果为flag,如果flag是0,说明相邻两位相同,返回false,如果flag是1,则判断下一组相邻两位数字,由于循环结束时未对最后一组数组判断,因此在函数的返回体那里需要返回flag是否等于1对最后一组进行判断。

代码:

class Solution {public boolean hasAlternatingBits(int n) {if ( n == 1){return true;}String binary = Integer.toBinaryString(n);char[] chars = binary.toCharArray();int flag = chars[0] ^ chars[1],len = chars.length;for (int i = 2; i < len; i++) {if (flag == 0){return false;}else {flag = chars[i-1] ^ chars[i];}}return flag == 1;}
}

227. 基本计算器 II【中等题】

思路:

  1. 字符串中的空格是没有意义的,先将其全部去掉。
  2. 定义LinkedList集合list_num用来存储数据。
  3. 定义flag来表示当前有效数据前方的运算符,默认为 + 。
  4. 遍历字符串,如果当前字符是数字,则从这个位置向后遍历,直到遇见非数字的字符为止,定义j为终止字符,那么有效数字即为字符串s从 i 到 j 截掉之后所表示的数字,用num来存储,并将 i 位置 更新到 j 位置。
  5. 如果当前字符不是数字(注意这里我指的的那个是步骤4中 i 位置没更新之前的 i位置字符),或者当前下标 i 已经等于 字符串长度了, 那么判断有效数字num前方的运算符flag是什么,+ 则 将 num 添加到数据集合的末尾; - 则将 num 取反后添加到数据集合的末尾;* 则将数据集合末尾的数据取出并删除,乘上现在的有效数字 num ,并将 积 添加到数据集合末尾; / 则将数据集合末尾的数据取出并删除,除以现在的有效数字 num,并将 商 添加到数据集合末尾,处理之后将 当前字符 cur 表示的运算符更新到flag中,i++遍历下一位字符。
  6. 最后将list_num中的每一个元素都取出来累加,将累加和返回即为答案,这里需要注意,要用取出元素并删除的操作来累加,不要用for循环遍历,两者之间运行时间相差十几毫秒,这是LinkedList的数据结构决定的。

代码:

class Solution {public int calculate(String s) {s = s.replaceAll(" ","");LinkedList<Integer> list_num = new LinkedList<>();int num = 0,len = s.length(),i = 0;char flag = '+';while (i<len){char cur = s.charAt(i);boolean isNum = Character.isDigit(cur);if (isNum){int j = i;while (j < len){if (Character.isDigit(s.charAt(j))){j++;}else {break;}}num = Integer.parseInt(s.substring(i,j));i = j;}if (!isNum || i == len){switch (flag){case '+':list_num.addLast(num);break;case '-':list_num.addLast(-num);break;case '*':list_num.addLast(list_num.removeLast()*num);break;case '/':list_num.addLast(list_num.removeLast()/num);break;}flag = cur;i++;}}int ans = 0;while (!list_num.isEmpty()){ans += list_num.removeLast();}return ans;}
}

264. 丑数 II【中等题】

思路:【对官方题解的理解】

  1. 定义数组dp,其中dp[i]表示第i个丑数,第n个丑数即为dp[n],即返回dp[n]即可。
  2. 由于最小的丑数是1,所以dp[i] = 1。
  3. 当前dp[i]乘以2,3,5,这三个数为候选丑数,定义三个指针p2,p3,p5分别表示这三个候选丑数在dp数组中对应的下标,初始值均为1。
  4. i 从2开始遍历(n=1的话不走循环直接返回dp[i] = 1),到等于n结束。定义num2,num3,num5表示三个候选丑数的值,选中其中值最小的丑数加入dp数组。并判断这个被选中的丑数是num2,num3,num5这三个数中哪个幸运儿,如果哪个幸运儿被选中做丑数,就将它的下标往右移动一位,因为候补丑数的诞生只跟前一位丑数有关。
  5. 循环结束返回dp[n]即可。

代码:

class Solution {public int nthUglyNumber(int n) {int[] dp = new int[n+1];dp[1] = 1;int p2 = 1,p3 = 1,p5 = 1;for (int i = 2; i <= n; i++) {int num2 = dp[p2]*2,num3 = dp[p3]*3,num5 = dp[p5]*5;dp[i] = Math.min(num2,Math.min(num3,num5));if (dp[i] == num2){p2++;}if (dp[i] == num3){p3++;}if (dp[i] == num5){p5++;}}return dp[n];}
}

693. 交替位二进制数 / 227. 基本计算器 II / 264. 丑数 II相关推荐

  1. LeetCode 263. 丑数 264. 丑数 II(DP)

    文章目录 1. LeetCode 263. 丑数 解题 2. LeetCode 264. 丑数 II DP解题 1. LeetCode 263. 丑数 编写一个程序判断给定的数是否为丑数. 丑数就是只 ...

  2. leetcode - 264. 丑数 II

    264. 丑数 II -------------------------------------------- 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示 ...

  3. 【LeetCode】263.丑数 264. 丑数 II

    I. 263. 丑数(是否为丑数) 一.题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 ...

  4. LeetCode 264. 丑数 II

    264. 丑数 II Ideas 竟然没想到用小根堆,白学了,再把小根堆抄一遍. Code Python class Solution:def nthUglyNumber(self, n: int) ...

  5. 力扣693.交替位二进制数

    题目描述 给定一个正整数,检查它的二进制表示是否总是 0.1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同. 示例 1: 输入:n = 5 输出:true 解释:5 的二进制表示是:10 ...

  6. 「 每日一练,快乐水题 」693. 交替位二进制数

    文章目录

  7. [leetcode]693. 交替位二进制数

    class Solution {public:bool hasAlternatingBits(int n) {long long temp = n^(n>>1); // 0000101 ^ ...

  8. Leetcode 264. 丑数 II 解题思路及C++实现

    方法一:暴力解法 解题思路: 直接从整数1开始,不断递增,判断该数字是否为丑数(专门写一个判断是否为丑数的函数),当遇到一个丑数,则计数值加1,直至遇到n个丑数为止. 当n很大时,这种暴力解法会遇到 ...

  9. 86. Leetcode 264. 丑数 II (动态规划-基础题)

    给你一个整数 n ,请你找出并返回第 n 个 丑数 .丑数 就是只包含质因数 2.3 和/或 5 的正整数.示例 1:输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, ...

最新文章

  1. Jmeter-接口测试相关
  2. 足不出户,确保交付——独家交付秘籍(第二回)
  3. python upper_Python 3中的模块级string.upper函数在哪里?
  4. vue cli3.0 修改配置文件
  5. ————————————————素数的快速判断方法————————————————————...
  6. (十)瑞芯微rk3568 中qt工程ffmpeg 拉取rtsp视频流
  7. java计算机毕业设计随心淘网管理系统源代码+数据库+系统+lw文档
  8. r语言clind函数_19 函数进阶 | R语言教程
  9. 基于词典方法和机基于器学习方法的中文情感倾向分析(Web)
  10. 指数基金投资指南 笔记
  11. Unix/Linux编程:操作系统中的TCP/IP软件结构
  12. JS——数组中去除空空字符串
  13. mysql 数据库切分_mysql数据库切分
  14. 计算机键盘掉色,为什么计算机键盘指示灯熄灭?
  15. python回车换行怎么不行_python回车不能换行怎么办
  16. 读书笔记005:《伤寒论》- 足阳明胃经
  17. oracle网页客户端工具
  18. 鸿蒙兼容安卓,华为鸿蒙OS正式官宣!兼容安卓程序,网友反应却水火不容
  19. 国内智能语音行业分析报告
  20. linux netgear usb,家用四槽位 NETGEAR ReadyNAS NV+评测

热门文章

  1. Mongodb 腾讯云部署
  2. 小马哥RoboFly开源STM32F103四轴简介
  3. 护卫神mysql提权_护卫神主机大师提权漏洞利用分析
  4. 一个优秀项目管理师和系统分析师的75条经验(转载)
  5. Flowable从零单排(一)
  6. 西班牙访问学者生活风土人情介绍
  7. JAVA判断当前时间在时间范围内
  8. daloradous 中文模板
  9. 服务器安全软件--服务器安全狗windows V4.2枸杞版发布
  10. 杭电操作系统实验一----Linux内核编译及添加系统调用(完整实验报告)