代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树、总结
2023-12-13 09:52:14
代码随想录 (programmercarl.com)
738.单调递增的数字
一、暴力解法
从大大小遍历各个位,找到最先满足条件的单调递增数字
力扣上超时了
二、贪心思路
给定数字从后往前遍历,发现大于的情况,就将前一位-1,当前改为9
以下是错误?代码:
class Solution {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] chars = s.toCharArray();
for (int i = chars.length - 1; i >= 1; i--){
if (chars[i - 1] > chars[i]){
chars[i - 1]--;
chars[i] = '9' ;
//字符9才是9,如果直接写9,就是'\t'
}
}
return Integer.parseInt(String.valueOf(chars));
}
}
?错误原因:100的时候输出的结果是90,因为0和0不满足大于关系,不会改变为9。
但其实,这里一旦前面有大于关系,后面所有位数都要改为9才可以,这时,就需要定义一个start,来记录从start开始直到末尾,所有都赋值为9。
正确?代码:
class Solution {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] chars = s.toCharArray();
int start = chars.length;
for (int i = chars.length - 1; i >= 1; i--){
if (chars[i] < chars[i - 1]){
chars[i - 1]--;
start = i;
}
}
for (int i = start; i < chars.length; i++) {
chars[i] = '9';
}
return Integer.parseInt(String.valueOf(chars));
}
}
968.监控二叉树
卡尔:“本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。”
====所以暂时跳过了====
总结?
局部最优==》全局最优。
贪心无套路,忽难忽易。
文章来源:https://blog.csdn.net/YOYU_/article/details/134842844
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!