今天是第33天刷leetcode,立个flag,打卡60天,如果做不到,完成一件评论区点赞最高的挑战。
算法挑战链接
738. 单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/
第一想法
题目理解:找到一个比n更小的最大单调递增的数字。
因为要求单调递增,因此可能会出现 类似 3799998 这种需要修改的值在在第一个九的位置的这种情况。面对这种情况我一般采取的思路是使用另一个变量来记录第一个9的位置。
因此代码如下:
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));
}
}
idx这个变量是比较重要的,他会记录最大值第一次出现的位置。如果符合条件 i的值比i+1的值更大,那么就会使用idx-1,然后后面填充9。
看完代码随想录之后的想法
代码随想录的方法是找到最大值出现的最后一位,然后通过减1的方式不断的回退idx的值,最后找到第一个idx的值,我感觉我的方法会更加简单和容易理解。
实现过程中遇到哪些困难
无
今日收获
有时候花掉一点点的空间,换取更加简单粗暴的方式,我认为是值得的