LeetCode #246. Strobogrammatic Number

题目

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
posted @ 2020-12-07 14:35  老鼠司令  阅读(56)  评论(0编辑  收藏  举报