代码随想录算法训练营第37天 738.单调递增的数字 ●968.监控二叉树

738. 单调递增的数字

通过分析数字的每一位来解决。我们可以从左到右扫描数字,并确保在构造结果时遵循给定的规则。以下是具体实现:

  1. 将数字转换为字符数组,以便轻松访问每一位。
  2. 从左到右遍历数字的每一位,如果发现某一位大于其右边的位,则将该位减1,并将其右边的所有位设置为9。
  3. 返回整理后的数字。
class Solution {
    public int monotoneIncreasingDigits(int n) {
        char[] numChars = Integer.toString(n).toCharArray();
        int marker = numChars.length; // 用于标记从哪里开始将数字变为9
        for (int i = numChars.length - 1; i > 0; i--) {
            if (numChars[i] < numChars[i - 1]) {
                numChars[i - 1] -= 1; // 减少当前数字
                marker = i; // 标记当前位置,右边的所有数字都将变为9
            }
        }
        
        // 从标记的位置开始将数字变为9
        for (int i = marker; i < numChars.length; i++) {
            numChars[i] = '9';
        }

        return Integer.parseInt(new String(numChars));
    }
}

你可能感兴趣的:(算法,java,数据结构)