LeetCode刷题之788.旋转数字

LeetCode刷题之788.旋转数字

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字,则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?
  • 示例
输入: 10
输出: 4
解释: 在[1, 10]中有四个好数: 2, 5, 6, 9。注意 1 和 10 不是好数, 因为他们在旋转之后不变。
  • 注意
    • N的取值范围是[1, 10000]。
  • 代码:
class Solution:
    def rotatedDigits(self, N: int) -> int:
        def fun(num):
            a = {'0':'0',
            '1':'1',
            '2':'5',
            '5':'2',
            '6':'9',
            '8':'8',
            '9':'6'}
            s = str(num)
            result = ""
            for i in range(len(s)):
                if s[i] in a:
                    result = result + a[s[i]]
                else:
                    return 0
            if int(result) != num:
                return (1)
            else:
                return (0)
        S = 0
        for i in range(N+1):
            S = S + fun(i)
        return(S)
# 执行用时 :168 ms, 在所有 Python3 提交中击败了35.19%的用户
# 内存消耗 :13.8 MB, 在所有 Python3 提交中击败了6.09%的用户
  • 算法说明:
    建立一个判断好数的函数fun(),fun()函数中建立一个字典,键设置为0、1、2、5、6、8、9;将数字num转换为字符串,然后判断每一个字符是否包含在字典中,如果不包含,说明数字中有无效的字符,直接返回0,如果包含在字典中,将字符翻转,存储在result中,然后判断result是否和num相等,不相等,返回1,否则返回0;然后用for循环将1到N之间的数字逐个用fun()函数判断,返回求和结果即可。
发布了90 篇原创文章 · 获赞 1 · 访问量 1060

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/101289219