单调递增的数字
Leetcode 738
学习记录自代码随想录
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10
输出: 9
示例 2:
输入: n = 1234
输出: 1234
示例 3:
输入: n = 332
输出: 299
提示:
0 <= n <= 109
要点:1.暴力求解会超时;
2.需要想到从右向左遍历,当遇到左边数大于右边时,将该位减1,且将右边的数都置为9,如此就保证新的数字满足单调递增;
3.int类型转换为字符串函数to_string,string转换为int函数stoi,stoi(s,p,b),把字符串s从p开始转换成b进制的int;
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]){// 不能直接赋值为9,这样对于954508339输入,输出为899497939,9应当是再赋值i的后面所有位都为9,才能保证数字大小关系正确// strNum[i] = '9'; // flag标记为需要修改为9的最高位所在位置,其位置之后都应赋值为9flag = i;strNum[i-1]--;}}for(int i = flag; i < strNum.size(); i++){strNum[i] = '9';}return stoi(strNum);}
};