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)