递归 247. 中心对称数 II

247. 中心对称数 II

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

示例:

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

思路:递归

根据题目要求
n = 1 [‘0’, ‘1’, ‘8’]
n = 2 [‘11’, ‘69’, ‘88’, ‘96’]
n = 3 [‘101’, ‘609’, ‘808’, ‘906’, ‘111’, ‘619’, ‘818’, ‘916’, ‘181’, ‘689’, ‘888’, ‘986’]
n = 4 [‘1001’, ‘6009’, ‘8008’, ‘9006’, ‘1111’, ‘6119’, ‘8118’, ‘9116’, ‘1691’, ‘6699’, ‘8698’, ‘9696’, ‘1881’, ‘6889’, ‘8888’, ‘9886’, ‘1961’, ‘6969’, ‘8968’, ‘9966’]
即00不能单独出现以及出现在两端
使用递归将问题每次缩小n-2,并处理n=0和n=1的情况,且使用一个变量m,用来防止n=m时出现00在外侧的情况。

代码实现:

class Solution:
    def findStrobogrammatic(self, n: int) -> List[str]:
        def helper(n, m):
            if n == 0:
                return ['']
            if n == 1:
                return ['0', '1', '8']

            lst = helper(n - 2, m)

            res = []
            for i in lst:
                if n != m:
                    res.append('0' + i + '0')
                res.append('1' + i + '1')
                res.append('6' + i + '9')
                res.append('8' + i + '8')
                res.append('9' + i + '6')
            return res
        return helper(n, n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值