zoukankan      html  css  js  c++  java
  • 20190505-旋转数字

    难度分类

    简单

    题目描述

    我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。

    如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。

    现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?

    示例:

    输入: 10

    输出: 4

    解释:

    在[1, 10]中有四个好数: 2, 5, 6, 9。

    注意 1 和 10 不是好数, 因为他们在旋转之后不变。

    算法

    1. 先定义函数获取数字旋转180°后的数字
    2. 遍历1-N的数字然后,将每个数字的每一位进行旋转后如果能组成新的有效数,且新的有效数不等于X,则X为好数
    3. if/else,for/else的使用
    4. 两层循环使用

    考点

    代码

    class Solution(object):
        def rotatedDigits(self, N):
            """
            :type N: int
            :rtype: int
            """
            def is_reversenum(num):#编写函数获取数字旋转后对应的数字
                if num == 2:
                    return '5'
                if num == 5:
                    return '2'
                if num == 6:
                    return '9'
                if num == 9:
                    return '6'
                if num == 1 or num == 0 or num == 8:
                    return str(num)
                else:
                    return
            result =[]
            for i in range(1,N+1):#遍历1到N
                num =''
                for j in str(i):#遍历i的每位数依次进行旋转,如果i中某一位数字包含不能旋转成有效数字的数字则break,如果i中的所有数字都能旋转成功,则判断旋转之后的数是否等于旋转前的数,所以当触发break的时候使num =i,以防触发else中的int(num)!=i的条件
                    if is_reversenum(int(j)):
                        num+=is_reversenum(int(j))
                    else:
                        num = i
                        break
                else:
                    if int(num) !=i:
                        result.append(i)
            return len(result)

    进阶

    1. 分析题目可以知道如果想要数字旋转后是一个有效数字,需要满足条件:

    a)   数字中不包含不能旋转成数字的数字3,4,7

    b)   数字中必然包含了2,5,6,9方能使旋转后的数字不等于X,所以再次改进代码

    考点

    1. Continue使用

    代码

    class Solution(object):
        def rotatedDigits(self, N):
            """
            :type N: int
            :rtype: int
            """
            temp = {'0':'0','1':'1','2':'5','3':'','4':'','5':'2','6':'9','7':'','8':'8','9':'6'}
            count=0
            for i in range(1,N+1):
                if '3' in str(i) or '4' in str(i) or '7' in str(i):#数字中不包含不能旋转成数字的数字3,4,7
                    continue
                if '2' in str(i) or '5' in str(i) or '6' in str(i) or '9' in str(i):#数字中必然包含了2,5,6,9方能使旋转后的数字不等于X
                    count+=1
            return count
  • 相关阅读:
    iOS使用第三方管理工具
    Mysql忘记密码怎么办
    支付宝支付流程
    关于iOS9 HTTP不能正常使用的解决方法
    ios项目开发汇总
    sqlite3
    Drupal 7.31版本爆严重SQL注入漏洞
    Google发布SSLv3漏洞简要分析报告
    Linux“Bash”漏洞大爆发
    Discuz 5.x/6.x/7.x投票SQL注入分析
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10816458.html
Copyright © 2011-2022 走看看