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

怀化三中网站北京旅游网页设计

怀化三中网站,北京旅游网页设计,海南网上注册公司流程,工信部网站 地址摘要 在日常开发中,我们经常遇到一些关于对称性的判断,比如字符串回文、镜像翻转等。而 “中心对称数”(Strobogrammatic Number) 这个问题,本质上是考察一个数字在旋转 180 度后是否还是原来的样子。 这个问题看似简…

在这里插入图片描述
在这里插入图片描述

摘要

在日常开发中,我们经常遇到一些关于对称性的判断,比如字符串回文、镜像翻转等。而 “中心对称数”(Strobogrammatic Number) 这个问题,本质上是考察一个数字在旋转 180 度后是否还是原来的样子

这个问题看似简单,但如果不理解它的本质,很容易走弯路。本文不仅会分析解法,还会聊聊它的实际应用场景,以及在解决这个问题时可能会遇到的坑,帮助你更深入地理解这个问题。

题目描述

给定一个字符串 num,判断它是否是中心对称数

所谓中心对称数,指的是旋转 180 度后仍然相同的数字,比如:

  • "69" ➝ 旋转 180° 后仍是 "69"
  • "88" ➝ 旋转 180° 后仍是 "88"
  • "962" ➝ 旋转 180° 后变成 "296",和原数字不同

示例

输入: "69"
输出: true输入: "88"
输出: true输入: "962"
输出: false

痛点分析

这个问题的难点主要有以下几点:

  1. 并不是所有数字都能旋转
    直觉上,我们可能会觉得可以随便翻转数字,但事实并非如此。只有 0, 1, 6, 8, 9 这些数字在旋转 180° 后还能变成有效数字,而 2, 3, 4, 5, 7 这些数字根本没法对称。

  2. 需要正确匹配旋转后的映射关系
    例如 6 旋转后是 9,而 9 旋转后是 6,这是一种非对称映射,如果不注意这一点,很容易在代码实现时出错。

  3. 对称匹配的实现方式
    直觉上可能会想到先旋转整个字符串,再比对是否相等,但这样做起来比较麻烦。而最优解其实是用双指针从两边向中间检查,代码更简洁,逻辑也更清晰。

解题思路

要判断一个数字是否是中心对称数,可以分为以下几步:

确定旋转规则

首先,我们要知道哪些数字可以旋转,并且旋转后是什么样子的

数字旋转后
00
11
69
88
96

2, 3, 4, 5, 7 这些数字是无效的,如果 num 里有这些数字,那肯定不是中心对称数。

使用双指针进行对称检查

我们可以从字符串的两端向中间遍历,检查两端数字是否符合旋转对称规则:

  • 左指针(left) 指向字符串起始位置
  • 右指针(right) 指向字符串末尾
  • 逐个检查 num[left]num[right] 是否符合旋转匹配规则
  • 如果有任何一个不匹配,直接返回 false
  • 如果所有字符都符合规则,则返回 true

Swift 代码实现

func isStrobogrammatic(_ num: String) -> Bool {let mapping: [Character: Character] = ["0": "0", "1": "1", "6": "9", "8": "8", "9": "6"]let numArray = Array(num)var left = 0var right = numArray.count - 1while left <= right {guard let mappedChar = mapping[numArray[left]] else {return false}if mappedChar != numArray[right] {return false}left += 1right -= 1}return true
}

代码解析

  • mapping 哈希表:存储旋转 180° 后的映射关系
  • numArray:把字符串转换成数组,方便用索引访问字符
  • 双指针遍历
    • left 从左到右,right 从右到左
    • 检查 num[left] 是否在 mapping
    • 检查 mapping[num[left]] 是否等于 num[right]
    • 任何一个不匹配,就直接返回 false
    • 直到 left 超过 right,说明所有字符都符合要求,返回 true

示例测试

print(isStrobogrammatic("69"))   // true
print(isStrobogrammatic("88"))   // true
print(isStrobogrammatic("962"))  // false
print(isStrobogrammatic("818"))  // true
print(isStrobogrammatic("123"))  // false

测试结果

true
true
false
true
false

时间复杂度分析

  • 代码只遍历字符串一次(双指针各遍历一半),所以时间复杂度是 O(N),其中 N 是字符串长度。

空间复杂度分析

  • 只用了一个哈希表和两个指针,没有额外的数据结构,所以空间复杂度是 O(1)

实际应用场景

这类对称性检查的逻辑在很多场景下都有应用,例如:

  1. 数字显示校验
    电子设备(比如计算器、LED 显示屏)可能需要检查某个数字在 旋转 180° 后是否仍然有效,避免错误显示。例如,有些屏幕支持倒置显示,但如果某些字符不能正确匹配,那就会导致混乱。

  2. 验证码设计
    有些验证码要求 “旋转后仍然可读”,比如防止用户输错或机器识别失败。

  3. 车牌号 & 安全编码
    在某些国家,特殊车牌号或安全编码可能要求在 倒置或旋转后仍然有效,这就可以用这个方法来校验。

  4. 航空、军事领域的编号
    在某些飞行器或军事装备上,编号可能会被倒置或者镜像查看,因此需要确保它们即使旋转后也能正确识别。

总结

  • “中心对称数”(Strobogrammatic Number) 指的是 旋转 180° 后仍然相同的数字
  • 解法核心
    • 双指针遍历
    • 哈希表映射旋转关系
    • 不匹配即返回 false
  • 时间复杂度:O(N)空间复杂度:O(1),高效且简洁。
  • 实际应用:数字显示校验、验证码、车牌号、航空编号等场景。
http://www.dtcms.com/wzjs/826651.html

相关文章:

  • 商城网站建设code521网站查询系统怎么做
  • 宣城市建设监督管理局网站下载wordpress设置首页title
  • 淘宝电子网站建设论文高端人才招聘网站排名
  • 贵州网站制作设计公司哪家好wordpress 小说模块
  • 企业网站设计布局Wordpress编辑文章插件
  • 朝阳网站建设 国展wordpress js cdn
  • 北京建站报价在网站开发中进行用户管理
  • 要维护公司的网站该怎么做2024房地产彻底结束
  • 精品网站设计苏州平台公司
  • 招远网站建设厦门建设局怎么进
  • 友情下载网站php多版本共存wordpress
  • 建站售后服务logo设计在线生成免费商标图片
  • 网络电子商务购物网站建立网站目录结构时应注意哪几个方面?
  • 备案空壳网站学校网站建设规划
  • 做彩票网站服务器怎么做免费网站
  • wordpress 网站名称做网站公奇闻司郑州汉狮
  • 16岁的做兼职在什么网站好seo推广思路
  • 做网站加载速度有什么方法小新pro更改网站设置
  • 学做川菜的网站阿里云可以做电影网站吗
  • 英文定机票网站建设qqlist rss更新 wordpress
  • 网站建设网站制作有限做网站服务器可以挂到外地么
  • 宁国市网站建设衡水营销型网站建设
  • wordpress获取当前分类的子分类广西网站建设产品优化
  • 厅网站建设项目背景网站首页flash模板
  • 在线做动图的网站临安做企业网站的公司
  • 巴中建设银行网站安装2个wordpress
  • 怎么做家具定制网站网站子页面设计
  • 合江做网站品牌策划公司有哪些
  • 海南高端网站建设定制网页设计与制作教程书电子版
  • 建设网站后如何做后台网站建设规划ppt模板