【Leetcode】 738. 单调递增的数字

这篇具有很好参考价值的文章主要介绍了【Leetcode】 738. 单调递增的数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

示例 1:

输入: n = 10
输出: 9

示例 2:

输入: n = 1234
输出: 1234

示例3 :

输入: n = 332
输出: 299

提示:

0 <= n <= 109

AC:

/*
 * @lc app=leetcode.cn id=738 lang=cpp
 *
 * [738] 单调递增的数字
 */

// @lc code=start
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;
            }
        }
        for(int i = flag; i < str.size(); i++) {
            str[i] = '9';
        }
        return stoi(str);
    }
};
// @lc code=end

【Leetcode】 738. 单调递增的数字,Leetcode,leetcode,算法,职场和发展

需要注意的点:整数型转字符串操作以及字符串转整数操作


  • C++11引入了std::to_string函数,可以将数字类型转换为字符串类型。使用方法如下:
#include <string>
#include <iostream>

int main() {
    int i = 123;
    std::string s = std::to_string(i);
    std::cout << s << std::endl;
    return 0;
}

输出结果为:

123

底层逻辑:

  • 在实现上,std::to_string调用了std::stringstream,将数值类型转换为字符串类型。可以理解为它是一个基于流的解决方案,也可以通过以下方式手动转换:
#include <sstream>
#include <string>
#include <iostream>

int main() {
    int i = 123;
    std::stringstream ss;
    ss << i;
    std::string s = ss.str();
    std::cout << s << std::endl;
    return 0;
}

输出结果与上例相同。


  • C++11引入了std::stoi函数,可以将字符串转换为整型。使用方法如下:
#include <string>
#include <iostream>

int main() {
    std::string s = "123";
    int i = std::stoi(s);
    std::cout << i << std::endl;
    return 0;
}

输出结果为:

123

如果字符串无法转换为整型,则会抛出std::invalid_argumentstd::out_of_range两种异常。例如:

#include <string>
#include <iostream>

int main() {
    std::string s = "abc";
    try {
        int i = std::stoi(s);
        std::cout << i << std::endl;
    }
    catch (const std::invalid_argument& ia) {
        std::cerr << "Invalid argument: " << ia.what() << std::endl;
    }
    catch (const std::out_of_range& oor) {
        std::cerr << "Out of range: " << oor.what() << std::endl;
    }
    return 0;
}

输出结果为:

Invalid argument: stoi

底层逻辑:

  • 在实现上,std::stoi使用了std::strtol函数,将字符串转换为长整型,然后进行类型转换。它还使用了std::locale,允许指定特定的本地化设置来解析字符串。可以理解为它是一个更简单的基于C函数的解决方案,也可以通过以下方式手动转换:
#include <cstdlib>
#include <string>
#include <iostream>

int main() {
    std::string s = "123";
    char* end;
    int i = std::strtol(s.c_str(), &end, 10);
    if (*end == '\0') {
        std::cout << i << std::endl;
    }
    else {
        std::cerr << "Invalid argument" << std::endl;
    }
    return 0;
}

输出结果与上例相同。文章来源地址https://www.toymoban.com/news/detail-725918.html

到了这里,关于【Leetcode】 738. 单调递增的数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 贪心算法part6 | ● 738.单调递增的数字 ● 968.监控二叉树

    代码随想录算法训练营第一天 | 题目、题目 738.单调递增的数字 局部最优:前一个数比当前数小,前一个数位减一,当前数置为9 题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。 例如:98,一旦出现strNum[i - 1] strNum[i]的情况(非单调递增),首先想

    2024年02月10日
    浏览(38)
  • Day37 贪心算法 part06 738. 单调递增的数字 968. 监控二叉树

    建议二刷巩固

    2024年01月23日
    浏览(43)
  • 单调递增的数字——力扣738

    题目描述 解法

    2024年02月13日
    浏览(36)
  • 力扣第738题 单调递增的数字 c++ 暴力超时 贪心优化

    738. 单调递增的数字 中等 相关标签 贪心  数学 当且仅当每个相邻位数上的数字  x  和  y  满足  x = y  时,我们称这个整数是 单调递增 的。 给定一个整数  n  ,返回  小于或等于  n  的最大数字,且数字呈  单调递增  。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 109 从N开始

    2024年02月08日
    浏览(37)
  • DAY40:贪心算法(九)单调递增的数字(贪心的思路)

    本题暴力解法也需要看一下,虽然暴力解法超时了,但是这种思路是一种很基础的思路,需要了解 数字是没有办法直接采用下标遍历的 ,如果 要for循环遍历每个位置的数字,需要把数字转成字符串string 当且仅当每个相邻位数上的数字 x 和 y 满足 x = y 时,我们称这个整数是

    2024年02月12日
    浏览(49)
  • 算法刷题Day 37 单调递增的数字+监听二叉树

    两个可能经常要用到的函数 字符串转数字: to_string() 数字转字符串: stoi() 利用树后续遍历,同时加上状态转移的方法,非常值得反复学习

    2024年02月13日
    浏览(36)
  • 【LeetCode每日一题】单调栈 402 移掉k位数字

    402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k **位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 如果有 m+1 位数字,S1 a 0 a 1 a 2 . . . . a m a_0a_1a_2....a_m a 0 ​ a 1 ​ a 2 ​ .... a m ​ 需要去掉n位数字,

    2024年02月20日
    浏览(34)
  • 单调递增的数字+监控二叉树

    前一位减一的话,后面的所有位可以取到9,要从后往前遍历,保证单调递增,后面变小了,前面也要变小 String.valueOf 转换为String类型, Integer 类的 valueOf 方法 :将字符串或其他可以表示整数的数据转换为 Integer 对象。 监控二叉树(四种情况,主要是根节点为0不容易想到 三

    2024年04月26日
    浏览(30)
  • 【算法|动态规划No.7】leetcode300. 最长递增子序列

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月07日
    浏览(46)
  • 【leetcode:1944. 队列中可以看到的人数】单调栈算法及其相关问题

    1944. 队列中可以看到的人数 有  n  个人排成一个队列, 从左到右  编号为  0  到  n - 1  。给你以一个整数数组  heights  ,每个整数  互不相同 , heights[i]  表示第  i  个人的高度。 一个人能  看到  他右边另一个人的条件是这两人之间的所有人都比他们两人  矮  。更

    2024年01月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包