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

刷题记录(LeetCode738 单调递增的数字)

当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

示例 1:

输入: n = 10
输出: 9

示例 2:

输入: n = 1234
输出: 1234

示例 3:

输入: n = 332
输出: 299

提示:

  • 0 <= n <= 10^{9}

 关键词:贪心,数学

思路:为了方便比较,先把原数各位置上的数分解成单个数字存储在数组中。从低位向高位遍历,如果当前位(低位)的数字小于前一位(高位)的数字,将当前位的数字改成9,。需要注意的是,既然这一位改成9了,那么为了保证单调递增的特性,当前位之前(更低位)的所有位置的数字也要全部改成9。如此遍历完一遍后,得到的数组就是最终结果的各位数字。之后再把每位数字取出来变成最终结果就行了。

需要注意的是,n=0需要单独处理。另外类型开long,不然会溢出。

题解如下:

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        vector<long> digits;
        while(n != 0) {
            digits.push_back(n % 10);
            n /= 10;
        }
        if(digits.size() == 0) return 0;
        for(int i = 0; i < digits.size() - 1; i++) {
            if(digits[i] < digits[i+1]) {
                for(int j = i; j >= 0; j--) digits[j] = 9;
                digits[i+1] -= 1;
            }
        }
        long flag = 1,res = 0;
        for(int i = 0; i < digits.size(); i++) {
            res += digits[i] * flag;
            flag *= 10;
        }
        return res;
    }
};


http://www.kler.cn/a/579398.html

相关文章:

  • Web3 的隐私保护机制:如何保障个人数据安全
  • Redis渐进式遍历数据库
  • rpc和proto
  • 【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文
  • 手写Tomcat:实现基本功能
  • CTFHub-FastCGI协议/Redis协议
  • 行式数据库与列式数据库区别
  • 【渗透测试】基于时间的盲注(Time-Based Blind SQL Injection)
  • elasticsearch是哪家的
  • 物联网中如何解决网络复杂性的问题
  • 爬虫去重:数据采集时如何进行去重,及去重优化策略
  • 2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析
  • PG vs MySQL 主从复制的异同点
  • hom_mat2d_to_affine_par 的c#实现
  • hadoop集群HDFS读写性能测试
  • 使用mergekit合并大型语言模型
  • 使用chroot预安装软件到ubuntu22中
  • 【学习笔记】【DeepSeek AI 医生】2-2 AI家庭医生课程内容介绍
  • vscode的终端无法运行vue或者node等命令解决方案
  • 在uni-app中使用SQLite实现离线下数据同步:从封装到实践