代码随想录算法训练营第三十九天 | 738.单调递增的数字、968.监控二叉树 (可以跳过)
监控二叉树同样的等代码随想录刷完后,再回头来看,先跳过
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),需要一个字符串,转化为字符串操作更方便
贪心总结
收获
贪心算法草草完事了,还是有很多没吃透,还需要二刷
原文地址:https://blog.csdn.net/m0_73815931/article/details/139194782
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!