当前位置: 首页 > news >正文

3 模拟——788. 旋转数字 ★★

2 模拟

788. 旋转数字

我们称一个数X为好数, 如果它的每位数字逐个地被旋转180度后,我们仍可以得到一个有效的,且和X不同的数。要求每位数字都要被旋转。
如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0、1和8被旋转后仍然是它们自己;2和5可以互相旋转成对方(在这种情况下,它们以不同的方向旋转,换句话说,2和5互为镜像);6和9同理,除了这些以外其他的数字旋转以后都不再是有效的数字。
现在我们有一个正整数N,计算从1到N中有多少个数X是好数?

示例1:
输入: 10
输出: 4
解释: 在[1, 10]中有四个好数:2, 5, 6, 9。
注意:1和10不是好数, 因为他们在旋转之后不变。

算法设计

根据题目的要求,一个数是好数,当且仅当:

  • 数中没有出现3、4、7;
  • 数中至少出现一次2或5或6或9。

枚举[1, n]中的每一个数,解析该数的每一位上的数字,如果出现2或5或6或9,令flag=true;如果出现3、4、7,则令flag=false,并立即break跳出循环。如果flag=true,则计数器ans++。最后返回ans即可。

算法实现

//Leetcode788 旋转数字 
int rotatedDigits(int n) {int ans = 0;for (int i = 1; i <= n; i++) {bool flag = false;int x = i;while (x) {int d = x % 10; //取每一位上的数字x /= 10;if (d == 2 || d == 5 || d == 6 || d == 9) flag = true;else if ( d == 3 || d == 4 || d == 7) {flag = false;break;}}if (flag) ans++;}return ans;
}

上面的程序中,判断语句过于繁琐,也可以定一个一个判定数组,出现3、4、7的位置设为-1,出现2或5或6或9的位置设为1,其它位置设为0。
const int check[10] = {0, 0, 1, -1, -1, 1, 1, -1, 0, 1};
这样只需要根据数位对应位置的值判断即可,不需要枚举那么多种情况。

算法实现

//Leetcode788 旋转数字 
const int check[10] = {0, 0, 1, -1, -1, 1, 1, -1, 0, 1};
int rotatedDigits(int n) {int ans = 0;for (int i = 1; i <= n; i++) {bool flag = false;int x = i;while (x) {int d = x % 10;x /= 10;if (check[d] == 1) flag = true;else if(check[d] == -1) {flag = false;break;}}if (flag) ans++;}return ans;
}

算法分析

n个数需要枚举,检查一个数需要遍历每个数字,n的数位为O(logn),时间复杂度为O(nlogn),空间复杂度为O(1)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串
  • 重拾精髓:go doc -http让离线包文档浏览更便捷
  • C语言操作符详解(13)
  • 大二上学期计划安排
  • OpenCV结构分析与形状描述符(18)比较两个轮廓相似度的函数matchShapes()的使用
  • 数据结构应用实例(二)——K均值聚类
  • 小型洗衣机什么牌子好又便宜?五款备受好评机型测评,闭眼入
  • 小米红米系列机型 机型代码查询总目录 adb指令查询步骤
  • vs2019成功连接数据库mysql
  • 深度学习算法在图算法中的应用(图卷积网络GCN和图自编码器GAE)
  • lxml官方入门教程(The lxml.etree Tutorial)翻译
  • 微波无源器件 4 基于高阶定向耦合器的双极化波束形成网络
  • MySQL系列—10.Innodb行格式
  • Google Test(gtest)中 Mocks
  • Redis重要知识点:哨兵是什么?哨兵如何选择Redis主服务器
  • [case10]使用RSQL实现端到端的动态查询
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Asm.js的简单介绍
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Java读取Properties文件的六种方法
  • Java方法详解
  • LeetCode算法系列_0891_子序列宽度之和
  • Material Design
  • mysql常用命令汇总
  • Netty 4.1 源代码学习:线程模型
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • node和express搭建代理服务器(源码)
  • sublime配置文件
  • 官方解决所有 npm 全局安装权限问题
  • 利用DataURL技术在网页上显示图片
  • 前端_面试
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 实现简单的正则表达式引擎
  • 提醒我喝水chrome插件开发指南
  • 用简单代码看卷积组块发展
  • 由插件封装引出的一丢丢思考
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​如何在iOS手机上查看应用日志
  • # 计算机视觉入门
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #NOIP 2014#Day.2 T3 解方程
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (03)光刻——半导体电路的绘制
  • (06)金属布线——为半导体注入生命的连接
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)鸿鹄云架构一服务注册中心
  • (转)母版页和相对路径
  • .describe() python_Python-Win32com-Excel
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 项目指定SDK版本