当前位置: 首页 > article >正文

代码随想录算法训练营Day36 —— 738.单调递增的数字

738.单调递增的数字

思路:

题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299

确定了遍历顺序之后,那么此时局部最优就可以推出全局,找不出反例,试试贪心

代码:

//手撕
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string strnum = to_string(n);
        int flag = strnum.size();
        for(int i = strnum.size()-1; i>0; i--){
            if(strnum[i-1]>strnum[i]){
                flag = i;
                strnum[i-1]--;
            }
        }
        for(int i = flag; i<strnum.size(); i++){
            strnum[i] = '9';
        }
        return stoi(strnum);
    }
};

//卡哥代码
class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        string strNum = to_string(N);
        // flag用来标记赋值9从哪里开始
        // 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
        int flag = strNum.size();
        for (int i = strNum.size() - 1; i > 0; i--) {
            if (strNum[i - 1] > strNum[i] ) {
                flag = i;
                strNum[i - 1]--;
            }
        }
        for (int i = flag; i < strNum.size(); i++) {
            strNum[i] = '9';
        }
        return stoi(strNum);
    }
};

  • 时间复杂度:O(n),n 为数字长度
  • 空间复杂度:O(n),需要一个字符串,转化为字符串操作更方便

23.监控二叉树(二刷补)


http://www.kler.cn/news/136201.html

相关文章:

  • Spring 设计模式之装饰器模式
  • 基于JAVASE的题
  • 青少年编程与数学 02-002 Sql Server 数据库应用 15课题、备份与还原
  • 让你的 IDEA 使用更流畅 | IDEA内存修改
  • 多IP访问网站
  • 阿里面试竟被“DPO微调”吊打...
  • Android App 启动流程学习
  • 从暗黑3D火炬之光技能系统说到-Laya非入门教学一~资源管理
  • [github初学者教程] 分支管理-以及问题解决
  • 网络运维与网络安全 学习笔记2023.11.18
  • 基于单片机温湿度PM2.5报警系统
  • Ubuntu中apt-get update显示域名解析失败
  • axios的使用,cancelToken取消请求
  • 【前端学java】Java中的接口和枚举概念(7)
  • 音视频流媒体之 IJKPlayer FFmpeg Android 编译
  • 计算机基础知识54
  • Linux--网络编程
  • GetKeyState获取键盘状态(原神水龙王转转转)
  • C练习题_14
  • 单例模式(饱汉式和饿汉式)
  • Python大数据之linux学习总结——day10_hive调优
  • 【洛谷 P3743】kotori的设备 题解(二分答案+递归)
  • 在python中分别利用numpy,tensorflow,pytorch实现数据的增加维度(升维),减少维度(降维)
  • 微机原理_14
  • 复杂数据统计与R语言程序设计实验一
  • Android 11.0 展讯平台关于ota升级开机logo的相关功能实现