LeetCode #246. Strobogrammatic Number
题目
解题方法
能够满足条件的数只有0、1、6、8、9几个,且只有0、1、8可以自我180°对称,6和9必须要配对出现。所以做一个字典dic把这些数加进去,然后根据数组长度是否是奇数来看看是不是要判断一下中间那个数是否在0、1、8几个里面。这样之后就可以把字符串num从中间劈开,分别设置left和right指针从中间向两边遍历,判断对应位置是否配对即可。
时间复杂度:O(n)
空间复杂度:O(1)
代码
class Solution:
def isStrobogrammatic(self, num: str) -> bool:
dic = {
"0":"0",
"1":"1",
"6":"9",
"8":"8",
"9":"6"
}
n = len(num)
left = n // 2 - 1
right = n // 2
if n % 2:
if num[right] not in {"0", "1", "8"}: return False
right += 1
while left > -1:
if num[left] not in dic or num[right] not in dic:
return False
if dic[num[left]] != num[right] or dic[num[right]] != num[left]:
return False
left -= 1
right += 1
return True