当前位置:   article > 正文

Python算法例27 对称数_对称数生成代码

对称数生成代码

1. 问题描述

对称数是一个旋转180°后(倒过来)看起来与原数相同的数,找到所有长度为n的对称数。

2. 问题示例

给出n=2,返回["11","69","88","96"]。

3. 代码实现

采用递归生成对称数的方法实现

具体步骤如下:

  1. 对于长度为 0 的对称数,返回空列表 [];
  2. 对于长度为 1 的对称数,返回 ['0', '1', '8'];
  3. 对于长度大于 1 的对称数,可以通过递归地生成长度为 n-2 的对称数,然后在两侧加上合适的数字来得到长度为 n 的对称数。
    在两侧加上合适的数字可以使用循环遍历来实现,需要注意开头不能是'0'。
  1. def find_symmetric_numbers(n):
  2. if n == 0:
  3. return []
  4. elif n == 1:
  5. return ['0', '1', '8']
  6. elif n == 2:
  7. return ['11', '69', '88', '96']
  8. else:
  9. result = []
  10. symmetric_nums = find_symmetric_numbers(n-2)
  11. for num in symmetric_nums:
  12. result.append('0' + num + '0')
  13. result.append('1' + num + '1')
  14. result.append('6' + num + '9')
  15. result.append('8' + num + '8')
  16. result.append('9' + num + '6')
  17. return result
  18. n = int(input("请输入对称数的长度:"))
  19. result = find_symmetric_numbers(n)
  20. print("长度为", n, "的对称数是:", result)

这个算法使用了递归生成对称数,时间复杂度取决于生成的对称数个数,可以表示为 O(k^n),其中 k 是每个位置可能的数字个数(这里是5,因为可以是'0', '1', '6', '8', '9'),n 是对称数的长度。在实际应用中,n 一般不会太大,因此该算法是有效的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/580549
推荐阅读
相关标签
  

闽ICP备14008679号