You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写单调递减数字判定函数?附单调数判定问题及现有递增实现

判断数字是否为单调数(无数组/字符串)

首先,你现有的isMonotonic函数逻辑存在问题——它错误要求除最后两位外的所有高位必须等于第二位,像123这类合法递增数会被误判为非单调,所以需要先修正递增判断逻辑,再实现递减判断。

核心思路

单调数指各位数字单调递增(允许相等)或单调递减(允许相等),我们可以拆分两个独立判断函数,最终通过逻辑或得到结果:

  • 单调递增:从右往左逐位比较,每一位的前一位(左侧)≤后一位(右侧)(如十位≤个位、百位≤十位)
  • 单调递减:从右往左逐位比较,每一位的前一位(左侧)≥后一位(右侧)(如十位≥个位、百位≥十位)

修正后的单调递增函数

public static boolean isIncreasing(int num) {
    // 两位数及以下必然是单调数
    if (num < 100) return true;
    // 循环比较最后两位,直到只剩一位数
    while (num >= 10) {
        int lastDigit = num % 10;
        int secondLastDigit = (num / 10) % 10;
        // 前一位大于后一位,不满足递增条件
        if (secondLastDigit > lastDigit) {
            return false;
        }
        // 去掉最后一位,继续判断更高位
        num /= 10;
    }
    return true;
}

单调递减函数实现

逻辑和递增函数对称,仅反转比较条件:

public static boolean isDecreasing(int num) {
    if (num < 100) return true;
    while (num >= 10) {
        int lastDigit = num % 10;
        int secondLastDigit = (num / 10) % 10;
        // 前一位小于后一位,不满足递减条件
        if (secondLastDigit < lastDigit) {
            return false;
        }
        num /= 10;
    }
    return true;
}

最终判断函数

将两个判断结果做逻辑或,即可得到是否为单调数:

public static boolean isMonotonic(int num) {
    return isIncreasing(num) || isDecreasing(num);
}

测试示例

  • 输入110 → isDecreasing(110)返回true → 整体返回true
  • 输入123 → isIncreasing(123)返回true → 整体返回true
  • 输入101 → 两个函数均返回false → 整体返回false
  • 输入554 → isDecreasing(554)返回true → 整体返回true

内容的提问来源于stack exchange,提问作者vegaLDN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:25:19