赞
踩
对称数是一个旋转180°后(倒过来)看起来与原数相同的数,找到所有长度为n的对称数。
给出n=2,返回["11","69","88","96"]。
采用递归生成对称数的方法实现
具体步骤如下:
- 对于长度为 0 的对称数,返回空列表 [];
- 对于长度为 1 的对称数,返回 ['0', '1', '8'];
- 对于长度大于 1 的对称数,可以通过递归地生成长度为 n-2 的对称数,然后在两侧加上合适的数字来得到长度为 n 的对称数。
在两侧加上合适的数字可以使用循环遍历来实现,需要注意开头不能是'0'。
- def find_symmetric_numbers(n):
- if n == 0:
- return []
- elif n == 1:
- return ['0', '1', '8']
- elif n == 2:
- return ['11', '69', '88', '96']
- else:
- result = []
- symmetric_nums = find_symmetric_numbers(n-2)
- for num in symmetric_nums:
- result.append('0' + num + '0')
- result.append('1' + num + '1')
- result.append('6' + num + '9')
- result.append('8' + num + '8')
- result.append('9' + num + '6')
- return result
-
- n = int(input("请输入对称数的长度:"))
- result = find_symmetric_numbers(n)
- print("长度为", n, "的对称数是:", result)
这个算法使用了递归生成对称数,时间复杂度取决于生成的对称数个数,可以表示为 O(k^n),其中 k 是每个位置可能的数字个数(这里是5,因为可以是'0', '1', '6', '8', '9'),n 是对称数的长度。在实际应用中,n 一般不会太大,因此该算法是有效的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。