題目
給定一個非負整數 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
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
解題思路
第一反應:
從個位到最高位依次相鄰比較,不合條件,高位減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記錄連續(xù)相同數第一次出現(xiàn)的位置
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