[关闭]
@Scrazy 2017-04-12 11:16 字数 397 阅读 997

丑数

python 算法


只包含素因子2、3和5的数称作丑数。1,2,3,4,5,6,8,9,10,12,15,16,18是最前面的13个丑数。但7 不是丑数,以 7 为素因子的数也不是丑数。

思路:
1. 首先 1 是丑数,创建一个仅含 1 的 list
2. 下一个丑数肯定是 list 中某几个数的 2 3 5 倍的最小值

  1. # coding=utf-8
  2. def ugly_number(index):
  3. if index < 1:
  4. return 0
  5. res = [1]
  6. t2 = t3 = t5 = 0
  7. next = 1
  8. while next < index:
  9. min_num = min(res[t2] * 2, res[t3] * 3, res[t5] * 5)
  10. res.append(min_num)
  11. if res[t2] * 2 <= min_num:
  12. t2 += 1
  13. if res[t3] * 3 <= min_num:
  14. t3 += 1
  15. if res[t5] * 5 <= min_num:
  16. t5 += 1
  17. next += 1
  18. return res[index-1]
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注