如何编写单调递减数字判定函数?附单调数判定问题及现有递增实现
判断数字是否为单调数(无数组/字符串)
首先,你现有的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
相关产品推荐
相关产品推荐

