以递增的顺序打印形式2 ^ i*5 ^ j的数字

shr*_*sva 16 algorithm smooth-numbers

如何2^i * 5^j按递增顺序打印表单数量.

For eg:
1, 2, 4, 5, 8, 10, 16, 20
Run Code Online (Sandbox Code Playgroud)

sll*_*sll 1

所以我们有两个循环,一个是递增的i,第二个是j从零开始递增的,对吧?(问题标题中的乘法符号令人困惑)

你可以做一些非常简单的事情:

  1. 添加数组中的所有项目
  2. 对数组进行排序

或者您需要具有更多数学分析的其他解决方案?

编辑:通过利用合并排序问题的相似性来提供更智能的解决方案

2^i如果我们将和 的无限个数字想象为两个独立的流/列表,这个问题看起来与众所周知的合并排序5^j问题非常相似。

所以解决步骤是:

  • 从每个流(2 和 5)中获取两个数字 1
  • 比较
  • 返回最小的
  • 从先前返回的最小的流中获取下一个数字

就是这样!;)

PS:归并排序的复杂度alwaysO(n*log(n))