题目:
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
算法:
func monotoneIncreasingDigits(n int) int {
if n < 10 {
return n
}
ncopy := n
nArray := make([]int, 0)
for ncopy > 0 {
nArray = append(nArray, ncopy % 10)
ncopy = ncopy / 10
}
for left, right := 0, len(nArray) - 1; left < right; left, right = left + 1, right -1 {
nArray[left], nArray[right] = nArray[right], nArray[left]
}
i := 1
for i < len(nArray) && nArray[i - 1] <= nArray[i]{
i ++
}
// 3321->2999
// 2321->2299
// 从n的高位到低位,找到第一个index ,nArray[index] > nArray[index + 1]
// 从index + 1开始向低位的所有数要变成9,index位置的数要减1,不够就向高位借
if i < len(nArray) {
for i > 0 && nArray[i - 1] > nArray[i] {
nArray[i - 1] --
i --
}
for i ++; i < len(nArray); i ++ {
nArray[i] = 9
}
}
// 第i位不用变了
ans := 0
for j := 0; j < len(nArray); j ++ {
ans = ans * 10 + nArray[j]
}
// 组合数字得到结果
return ans
}