题目:
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
解答:
方法一:暴力解法
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
#检查i是否是单调递增的数字
def check(n):
maxv=10
while n:
t=n%10
if t<=maxv:
maxv=t
else:
return False
n=n//10
return True
#暴力解法
for i in range(n,-1,-1):
if check(i):
return i
方法二:贪心
从后向前遍历,碰到nums[i-1]>nums[i],则将nums[i-1]-1,并将i及其之后的数位调整为9(ps:也可先找到位于最前面的不满足条件的i,最后再做统一调整)
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
a=list(str(n))
t=len(a)
flag=t
for i in range(t-1,0,-1):
if int(a[i-1])>int(a[i]):
flag=i
a[i-1]=str(int(a[i-1])-1)
#若原始数据已经是单调递增的数字
if flag==t:
return n
for i in range(flag,t):
a[i]='9'
return int(''.join(a))