给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
贪心策略:
- 情况1:1234的递增的,直接不变
- 情况2:12321的3>2,所以3要减一,后面的所有位变成9,满足最大有递增,满足题意
- 情况3:特例,123321,中要为122999,而非123299,所以要记录本位连续相同个数
- 从左到右,当高位等于次高位,重复数k加一;否则,小于,不变,k置为零。大于本位前k位减一,后边全为9,结束。
时间复杂度:O(n)
数据分析:
一个数组:存放每位数值
一个k变量:记录本位之前数值连续相同个数
一个m:计算结果
空间复杂度:O(n)
代码:
class Solution:
def monotoneIncreasingDigits(self, N: int) -> int:
N=str(N)
N=[int(i) for i in N]
k=0
for i in range(len(N)-1):
if N[i]>N[i+1]:
N[i-k]-=1
for j in range(i+1-k,len(N)):
N[j]=9
else:
break
if N[i]==N[i+1]:
k+=1
else:
k=0
m=N[-1]
j=0
for i in range(len(N)-1,0,-1):
m+=N[j]*pow(10,i)
j+=1
return m