leetcode 738.单调递增的数字
程序员文章站
2022-07-12 12:39:11
...
leetcode 738.单调递增的数字
题干
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例 1:
输入: N = 10
输出: 9
示例 2:
输入: N = 1234
输出: 1234
示例 3:
输入: N = 332
输出: 299
说明: N 是在 [0, 10^9] 范围内的一个整数。
题解
用最捞的代码,实现最nt的功能
思路就是找到N的递增开头,然后寻找比这个开头小的最大的递增数
然后在得到的递增数后面不断填9,调试地狱。
class Solution {
public:
int monotoneIncreasingDigits(int N) {
string s = to_string(N);
long long head = s[0] - '0';
long long pre = N % 10;
bool nAsAnswerFlag = true;
for(long long i = 1 ; i < s.size() ; ++i){
if(s[i] >= s[i-1]){
head = head * 10 + s[i] - '0';
}else{
break;
}
}
if(head == N){
return N;
}
string sHead = to_string(head);
long long totalHeadDigit = sHead.size();
long long validHeadDigit = 1;
for(long long i = totalHeadDigit - 2 ; i >= 0 ; --i){
if(sHead[i] == sHead[i+1]){
continue;
}else{
validHeadDigit = i + 2;
break;
}
}
//cout<<head<<endl;
//cout<<totalHeadDigit<<endl;
//cout<<validHeadDigit<<endl;
if(totalHeadDigit - validHeadDigit != 0){
head = head / pow(10,totalHeadDigit - validHeadDigit);
}
//cout<<head;
head = head / 10 * 10 + head % 10 - 1;
while(head <= N){
head = head * 10 + 9;
}
head /= 10;
return head;
}
};
/*
如果N是一个各个位递增的数,则直接返回N
如果N不是,则答案的开头一定比N开头小的最大递增数,这里的开头指的是N开头上升的部分
所以有步骤:
1.得到N开头上升部分的数head
2.取<=head的最大数作为答案res的开头
3.在res后不断填充9
*/
推荐阅读
-
php中利用str_pad函数生成数字递增形式的产品编号
-
ae怎么做数字递增效果的动画?
-
【每日一道算法题】Leetcode之longest-increasing-path-in-a-matrix矩阵中的最长递增路径问题 Java dfs+记忆化
-
python(leetcode)-136只出现一次的数字
-
js实现数字递增特效【仿支付宝我的财富】
-
LeetCode 面试题56 - I. 数组中数字出现的次数
-
php中利用str_pad函数生成数字递增形式的产品编号
-
leetcode刷题(数组·位异或)16— 只出现一次的数字 II
-
LeetCode使用Python实现只出现一次的数字
-
【LeetCode-⭐Hot100】136. 只出现一次的数字