738.单调递增的数字
文章链接:代码随想录 (programmercarl.com)
思路:无思路
看完文章后的反思:(以98这个数为例)
(1)局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]--,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。
全局最优:得到小于等于N的最大单调递增的整数。
(2)遍历顺序,应当从后往前进行遍历,因为如果从前往后遍历的话,strNum[i-1]要是--了,可能就会比strNum[i-2]还要小,就不符合单调递增
(3)因此代码有两个层面,首先从后向前遍历,遇到strNum[i ] > strNum[i + 1]的情况,让strNum[i ]--;其次就是要将i之后的数全部变成9,让整个数组尽可能的大
学习到的知识:
(1)字符--,字符在进行数值运算时,会自动进行计算
(2)Integer.parseInt()方法
(3)String.valueOf()方法String.valueOf()方法的使用_Seven7707的博客-CSDN博客_string.valueof
Java代码:
class Solution {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] sc = s.toCharArray();
int start = sc.length;//表示从第几个数开始变成9
//以98为例子
for(int i = sc.length - 2;i >= 0;i--){
if(sc[i] > sc[i + 1]){
sc[i]--;
start = i + 1;
}
}
//将start之后的字符都变成9
for(int i = start; i < sc.length;i++){
sc[i] = '9';
}
return Integer.parseInt(new String(sc));
}
}
714. 买卖股票的最佳时机含手续费(一刷先跳过)
文章链接:代码随想录 (programmercarl.com)
968.监控二叉树(一刷先跳过)