监控二叉树同样的等代码随想录刷完后,再回头来看,先跳过
738.单调递增的数字
代码随想录
解题思路
例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数
遍历顺序就是从后往前的,如果是从前从后的话,332就会变成329就不对了。
这里我们还需要利用flag来记录我们需要变成9的位置,例如1000,如果不记录就会变成0900的情况
这里处理位数,是使用tostring和stoi来操作的,比较方便
class Solution {
public:int monotoneIncreasingDigits(int n) {string str = to_string(n);int flag = str.size();for(int i = str.size()-1; i >0 ; i--){if(str[i-1]>str[i]){//前一位大于后一位str[i-1]--;flag = i; //记录的是从哪一位开始都变成9}}for(int i = flag ; i<str.size() ; i++){str[i] = '9';}return stoi(str);}
};
- 时间复杂度:O(n),n 为数字长度
- 空间复杂度:O(n),需要一个字符串,转化为字符串操作更方便
贪心总结
代码随想录
收获
贪心算法草草完事了,还是有很多没吃透,还需要二刷