class Solution {
public:
int monotoneIncreasingDigits(int n) {
}
};
738. 单调递增的数字
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
提示:
0 <= n <= 109
相似题目
原站题解
python3 解法, 执行用时: 44 ms, 内存消耗: 15.9 MB, 提交时间: 2023-05-10 10:27:19
class Solution: def monotoneIncreasingDigits(self, N: int) -> int: ones = 111111111 result = 0 for _ in range(9): while result + ones > N: ones //= 10 result += ones return result
java 解法, 执行用时: 1 ms, 内存消耗: 38.6 MB, 提交时间: 2023-05-10 10:26:19
class Solution { public int monotoneIncreasingDigits(int N) { char[] arr = (N + "").toCharArray(); int max = -1, idx = -1; for (int i = 0; i < arr.length - 1; i++) { if (max < arr[i]) { max = arr[i]; idx = i; } if (arr[i] > arr[i + 1]) { arr[idx] -= 1; for(int j = idx + 1;j < arr.length;j++) { arr[j] = '9'; } break; } } return Integer.parseInt(new String(arr)); } }
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-05-10 10:25:27
func monotoneIncreasingDigits(n int) int { s := []byte(strconv.Itoa(n)) i := 1 for i < len(s) && s[i] >= s[i-1] { i++ } if i < len(s) { for i > 0 && s[i] < s[i-1] { s[i-1]-- i-- } for i++; i < len(s); i++ { s[i] = '9' } } ans, _ := strconv.Atoi(string(s)) return ans }