738. 单调递增的数字
通过分析数字的每一位来解决。我们可以从左到右扫描数字,并确保在构造结果时遵循给定的规则。以下是具体实现:
- 将数字转换为字符数组,以便轻松访问每一位。
- 从左到右遍历数字的每一位,如果发现某一位大于其右边的位,则将该位减1,并将其右边的所有位设置为9。
- 返回整理后的数字。
class Solution {public int monotoneIncreasingDigits(int n) {char[] numChars = Integer.toString(n).toCharArray();int marker = numChars.length; // 用于标记从哪里开始将数字变为9for (int i = numChars.length - 1; i > 0; i--) {if (numChars[i] < numChars[i - 1]) {numChars[i - 1] -= 1; // 减少当前数字marker = i; // 标记当前位置,右边的所有数字都将变为9}}// 从标记的位置开始将数字变为9for (int i = marker; i < numChars.length; i++) {numChars[i] = '9';}return Integer.parseInt(new String(numChars));}
}