738.单调递增的数字
通过贪一部分值,达到高效的方法
-
链接:代码随想录
-
解题思路:
①暴力判断的方法时间复杂度为O(m * n),会超时
②贪心:贪在只判断数字大小
如果nums[i - 1] > nums[i] 做出nums[i - 1]–,nums[i] = 9
(让数字最大),这样的操作一次for循环遍历,就可以判断判断出结果
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);//变为字符串
char[] chars = s.toCharArray();//为了防止多次创建String
int flag = chars.length;//记录变9的最小位置,这里初始化是为了防止如1234
//这个数没有改动,但是把flag从头到尾都遍历的情况
for (int i = chars.length - 1; i > 0; i--) {
//判断是否递增
if(chars[i - 1] > chars[i]){
chars[i - 1]--;
flag = i;
}
}
//进行9赋值
for (int i = flag; i < chars.length; i++) {
chars[i] = '9';
}
return Integer.parseInt(String.valueOf(chars));
}
day8 字符串复习
- 反转字符串系列就是,双指针并加区间问题
- 去除空格,是双指针法在数组填充中的应用
- 翻转字符串里的单词,就是先去掉多余的空格,将字符串反转(从右向左看),然后再逐个反转区间内的单词(因为有空格存在)
- 左旋字符串,在于处理反转两次子串的逻辑和最后反转最后一次字符串的逻辑
空格存在)
- 左旋字符串,在于处理反转两次子串的逻辑和最后反转最后一次字符串的逻辑