0246. 中心对称数
大约 2 分钟
---
0246. 中心对称数
- 标签:哈希表、双指针、字符串
- 难度:简单
题目链接
题目大意
描述:
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
要求:
写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串的形式来表达数字。
示例:
- 示例 1:
输入: num = "69"
输出: true
- 示例 2:
输入: num = "88"
输出: true
解题思路
思路 1:哈希表 + 双指针
中心对称数是指旋转 180 度后看起来相同的数字。只有特定的数字在旋转后有意义:
- 旋转后还是 。
- 旋转后还是 。
- 旋转后变成 。
- 旋转后还是 。
- 旋转后变成 。
其他数字(如 )旋转后没有意义。
使用哈希表存储每个数字的旋转对应关系,然后用双指针从两端向中间检查:
- 如果字符串中包含不能旋转的数字,直接返回 。
- 如果两端字符的旋转对应关系不匹配,返回 。
- 如果所有字符都满足中心对称条件,返回 。
思路 1:代码
class Solution:
def isStrobogrammatic(self, num: str) -> bool:
# 定义中心对称数字的映射关系
strobogrammatic_map = {
'0': '0',
'1': '1',
'6': '9',
'8': '8',
'9': '6'
}
# 双指针从两端向中间检查
left, right = 0, len(num) - 1
while left <= right:
# 如果当前字符不能旋转,返回 False
if num[left] not in strobogrammatic_map:
return False
if num[right] not in strobogrammatic_map:
return False
# 检查旋转后的对应关系
if strobogrammatic_map[num[left]] != num[right]:
return False
left += 1
right -= 1
return True
思路 1:复杂度分析
- 时间复杂度:,其中 是字符串长度。需要遍历字符串一次。
- 空间复杂度:。哈希表大小固定为 ,不随输入规模变化。