题目
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例 1:
输入: N = 10
输出: 9
示例 2:
输入: N = 1234
输出: 1234
示例 3:
输入: N = 332
输出: 299
说明: N 是在 [0, 10^9] 范围内的一个整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/monotone-increasing-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
第一反应:
从个位到最高位依次相邻比较,不合条件,高位减1,低位全归9
例:4125
2<5
1<2
4>1 → 3999
例:78329
2<9
3>2 → 78299
8>2 → 77999
例:70987
8>7 → 70979
9>7 → 70899
0<8
7>0 → 69999
修改:
从高位向低位依次相邻比较,用tmp记录连续相同数第一次出现的位置
flag=true
a. arr[i]=arr[i+1] → if(flag) {tmp=i, flag = false}
b. arr[i]<arr[i+1] → tmp=i+1, flag = true
c. arr[i]>arr[i+1] → arr[tmp]-=1, arr[j]=9 (j>i)
例:77886
7=7 → tmp = 0, false
7<8 → tmp = 1, true
8=8 → tmp = 2, false
8>6 → 77799
例:2223443
2=2 → tmp = 0, false
2=2 → tmp = 0
2<3 → tmp = 3, true
3<4 → tmp = 4, true
4=4 → tmp = 4, false
4>3 → 2223399
例:4125
4>1 → 3999
例:78329
7<8 → tmp = 1
8>3 → 77999
例:70987
7>0 → 69999