您的位置:首页 > 教育 > 培训 > 南充疫情最新情况今天新增几例_建设工程公司网站_软件开发交易平台_搜索引擎营销的简称是

南充疫情最新情况今天新增几例_建设工程公司网站_软件开发交易平台_搜索引擎营销的简称是

2025/4/2 19:24:45 来源:https://blog.csdn.net/qq_36478920/article/details/146924708  浏览:    关键词:南充疫情最新情况今天新增几例_建设工程公司网站_软件开发交易平台_搜索引擎营销的简称是
南充疫情最新情况今天新增几例_建设工程公司网站_软件开发交易平台_搜索引擎营销的简称是

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

摘要

在日常开发中,我们经常遇到一些关于对称性的判断,比如字符串回文、镜像翻转等。而 “中心对称数”(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),高效且简洁。
  • 实际应用:数字显示校验、验证码、车牌号、航空编号等场景。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com