在问答区看到这个问题,下面7788的回答,真是千奇百怪。
因此,花了几分钟写了一下,不一定是最优解,但是效率和速度应该还可以,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
简单剖析:
1 2 3 4 5 6 7 8 9 |
|
main方法,主要进行计时,同时调用方法来对10位以内非重复数字进行查找。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
核心算法,用于打印指定长度的非空自然数,采用了递归算法。
参数length表示计算的层数,每递归一次少一。
由于数字是不断增加的,因此必须每多一个数字,都要新建一个对象,程序逻辑中还避免了以0开头的多位数。
不一定是最优解(理论上上一层算过的值下一次还是有用的,因此还可以优化,哪位大神写写看?),但是效率应该还算可以,在本人笔记本上大概3545ms左右。当然上面的算法有个好处是打印的结果还是自然数的序列,没有乱序。
打印3层的解如下
1 2 3 |
|