LeetCode-Python-247. 中心对称数 II

639 篇文章 23 订阅

中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。

找到所有长度为 n 的中心对称数。

示例 :

输入:  n = 2
输出: ["11","69","88","96"]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/strobogrammatic-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

观察可得,

对于 n - 1 是偶数的解来说,

只要在 n - 1的解的每个数中间 加上 0 或 1 或 8 就可以得到 n 的解。

对于 n - 1是奇数的解来说,

只要在 n - 2 的解的每个数中间加上 00 , 11, 88, 69, 96就可以得到n 的解。

class Solution(object):
    def findStrobogrammatic(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        record = dict()
        record[1] = ["0", "1", "8"]
        record[2] = ["11", "69", "88", "96"]
        pair = ["00", "11", "88", "69", "96"]
        if n <= 2:
            return record[n]
        cnt = 3
        while cnt <= n:
            tmp = []
            if (cnt - 1) % 2 == 0: #如果前一个是偶数长度,那么直接在中间加长度为1的就可以
                for item in record[cnt - 1]:
                    for num in record[1]:
                        tmp.append(item[:len(item)// 2] + num + item[len(item) // 2:])
            else:                  #如果前一个是奇数长度,那么就在中间加长度为2的就可以 ,注意要额外加“00”
                for item in record[cnt - 2]:
                    for num in pair:
                        tmp.append(item[:len(item)// 2] + num + item[len(item) // 2:])
            record[cnt] = tmp
            cnt += 1
        return record[n]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值