An integer has?monotone increasing digits?if and only if each pair of adjacent digits?x
?and?y
?satisfy?x <= y
.
Given an integer?n
, return?the largest number that is less than or equal to?n
?with?monotone increasing digits.
Example 1:
Input: n = 10 Output: 9
Example 2:
Input: n = 1234 Output: 1234
Example 3:
Input: n = 332 Output: 299
思路,此题求小于给定的数值N的最大的单调递增序列。对于每个数位,从后向前遍历,但凡发现前一位N[i-1]比后一位N[i]大,能做的就是把后一位N[i]置9,前一位置N[i-1]-1。
class Solution(object):
def monotoneIncreasingDigits(self, n):
"""
:type n: int
:rtype: int
"""
# convert int to string
strNum = str(n)
flag = len(strNum)
for i in range(len(strNum)-1, 0, -1):
if strNum[i] < strNum[i-1]:
flag = i
strNum = strNum[:i-1] + str(int(strNum[i-1])-1) + strNum[i:]
#for i in range(flag, len(strNum)):
print(flag)
strNum = strNum[:flag] + '9' * len( strNum[flag:])
return int(strNum)