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
  • 相关阅读:
    CSS3—— 2D转换 3D转换 过渡 动画
    CSS3——边框 圆角 背景 渐变 文本效果
    CSS3——表单 计数器 网页布局 应用实例
    CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器
    CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单
    CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
    CSS3——盒子模型 border(边框) 轮廓(outline)属性 margin外边距 padding填充
    Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
    数据库——单表查询
    数据库——添加,修改,删除
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10816458.html
Copyright © 2011-2022 走看看