最大数字,非递减数字

时间:2017-04-10 19:05:41

标签: algorithm performance number-theory

小于或等于N的最大正整数(称为k)是多少,使得整数k的所有数字都是非递减顺序?

约束:
1 <= N &lt; = 10 ^ 18
1&lt; = k&lt; = N
时间限制: 8

其中一个解决方案是检查从N-1开始的所有值(即N-1,N-2,N-3,.....),直到找到非减少数字的数字。 /> 但是,只有当N <= 10 ^ 10时,这才能在给定的时间限制内完成。
它超过给定约束的时限(N <= 10 ^ 18)。

1 个答案:

答案 0 :(得分:1)

一个简单的贪婪方法是从右边扫描数字,如果你发现一个小于左边数字的数字,那么减去左边的数字1并替换所有的数字使用9的最右边数字的当前数字。

例如:

132 -> 1 3 2

2 < 3 so replace 2 by 9 and decrease 3 by 1

您可以这样做,因为结果数字肯定会小于原始数字。此外,我们希望最大化数字,以便我们用最大可能的数字9替换数字,并使用最少的数字1减少左数字,以便最大化结果数。

对左边的所有数字重复此过程,直到找到有效数字。是的检查角落情况(前导零)。

代号1332

1332 - &gt; 1329 - &gt; 1299(有效号码)

所以答案是1299