目录
题目:
代码(首刷自解 2024年2月18日):
爽,无bug一遍过。这题思路是将数字从低位到高位一位一位放入数组中,如果出现高位大于地位的情况则将低位全部重置为9,然后高位-1,最后反向遍历相加即可
class Solution {
public:
int monotoneIncreasingDigits(int n) {
vector<int> digits(1,9);
while (n != 0) {
int number = n % 10;
n = n / 10;
if (number <= digits.back()) {
digits.push_back(number);
continue;
} else {
digits = vector<int>(digits.size(),9);
if (number == 0) {
number = 9;
n--;
} else {
number--;
}
digits.push_back(number);
}
}
int res = 0;
for (int i = digits.size() - 1; i >= 1; --i) {
res = res * 10 + digits[i];
}
return res;
}
};
代码(二刷自解 2024年6月16日 go)
func monotoneIncreasingDigits(n int) int {
// 反向遍历,如果nums[i] > nums[i + 1], 则nums[i + 1] 变成9, nums[i] - 1
s := strconv.Itoa(n)
ss := []byte(s)
for i := len(ss) - 1; i > 0; i-- {
if ss[i - 1] > ss[i] {
ss[i - 1]--
for j := i; j < len(ss); j++ {
ss[j] = '9'
}
}
}
res,_ := strconv.Atoi(string(ss))
return res
}