738. 单调递增的数字
题目描述
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
提示:
0 <= n <= 109
解法
方法一:贪心
从数字 n
的高位开始,找到第一个不满足 $n_{i-1} \le n_i$ 的位置 $i$。
然后,从后往前,只要发现 $n_{i-1} \gt n_i$,就将 $n_{i-1}$ 减 1。
最后将位置 $i$ 之后的所有数字都置为 9 即可。
时间复杂度 $O(\log n)$,空间复杂度 $O(\log n)$。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|