当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
思路:要让一个整数的每位数字从前往后递增,最直观的思路当然是暴力,如果这个数不满足,那就数字-1继续试,直到满足,很明显,这种做法应该很容易超时。
因此,我们就不能一个个数字去试,要直接变成最大的数字,比如98,没满足递增,后一个数字要变成9,前一个数字减1,变成89就满足了。因此用这种思路去做,从后往前去便利。但要注意的是,不仅仅要考虑相邻的两个数字,可能原来的时候相邻两个数字满足递增,但前面一对数字进行了变换之后,又不满足了,比如数字100,一开始比较0和0,满足要求不用变化,接下去比较1和0,不满足递增,1减去1变0,0变9,于是整个数变成了90,很明显答案应该是99,因此在上面判断到前一个数字大于后一个数字,不满足递增时,前一个数字减去1,后面的数字全变9才满足。
代码(Python):
class Solution(object):
def monotoneIncreasingDigits(self, n):
s = str(n) #转换为数字
for i in range(len(s)-1,0,-1):
if s[i] < s[i-1]: #若小于前一个数字,前一个数字-1,后面的数字全变9
s = s[:i-1] + str(int(s[i-1])-1) + '9' * (len(s) - i)
return int(s)