原题地址: 传送门
¶分析
题目要求是对于输入的X1,X2,…,XN,求至少在每个数字后方增加多少个的0-9来保证X1,X2,…,XN的递增顺序。
举个例子,输入集为98,9,8,很明显当前顺序不是递增的,如果要保证顺序递增,需要在保证数组第二个元素大于第一个元素,第三个元素大于第二个元素。在不考虑题目中添加位数数量限制的情况下,98,900,8000这种通过保证每个元素之间总位数差为1的方案也是蛮不错的,但是如果要求增加尽可能少的位数来达到题目要求,最佳方案为98,99,900,也就是说我们要做到尽可能保证后一个元素的值尽可能接近前一个元素的值。
再举个例子,输入集为1,1,1,1,1,1,1,1,1,1,1,1,1,1,那么补全后的结果应该为1 10 11 12 13 14 15 16 17 18 19 100 101 102。
另外需要注意,此题有两个测试集,Test1还好,每次输入集的X数量以及范围都比较小,用int完全可以搞定,但是对于Test2来说,int不一定能够满足,当X的最大值为10^9,N为100时,在极端情况下(前一个元素总是比后一个元素大),最终补全后的结果的位数最大为10 + 100 - 1 = 109位,此时用int将会溢出导致结果错误,可以通过使用bigint或者自己将大数按位拆位数组来避免溢出的问题!
¶Solve
1 | package main |