LeetCode 738. 单调递增的数字
题目链接:738. 单调递增的数字 - 力扣(LeetCode)
这道题两种思路,卡哥的思路不说了。
代码:
#python
class Solution:
def monotoneIncreasingDigits(self, N: int) -> int:
# 将整数转换为字符串
strNum = list(str(N))
# 从右往左遍历字符串
for i in range(len(strNum) - 1, 0, -1):
# 如果当前字符比前一个字符小,说明需要修改前一个字符
if strNum[i - 1] > strNum[i]:
strNum[i - 1] = str(int(strNum[i - 1]) - 1) # 将前一个字符减1
# 将修改位置后面的字符都设置为9,因为修改前一个字符可能破坏了递增性质
strNum[i:] = '9' * (len(strNum) - i)
# 将列表转换为字符串,并将字符串转换为整数并返回
return int(''.join(strNum))
/JAVA
public class Solution {
public int monotoneIncreasingDigits(int N) {
// 将整数转换为字符数组
char[] strNum = String.valueOf(N).toCharArray();
// 从右往左遍历字符数组
for (int i = strNum.length - 1; i > 0; i--) {
// 如果当前字符比前一个字符小,说明需要修改前一个字符
if (strNum[i - 1] > strNum[i]) {
strNum[i - 1] = (char) (strNum[i - 1] - '0' - 1 + '0'); // 将前一个字符减1
// 将修改位置后面的字符都设置为'9',因为修改前一个字符可能破坏了递增性质
Arrays.fill(strNum, i, strNum.length, '9');
}
}
// 将字符数组转换为字符串,并将字符串转换为整数并返回
return Integer.parseInt(new String(strNum));
}
}