738. 单调递增的数字
时间:2020年12月15日
知识点:贪心
题目链接:https://leetcode-cn.com/problems/monotone-increasing-digits/
题目
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
示例 1:
输入: N = 10
输出: 9
示例 2:
输入: N = 1234
输出: 1234
示例 3:
输入: N = 332
输出: 299
说明: N 是在 [0, 10^9] 范围内的一个整数。
解法:
- 经过简单的模拟可以发现 和减法类似 如果不够了也就是后面的比前面小了 前面的-1 后面变成9就可以
- 为了方便处理 把数字放入数组中
- 这样就是倒着来看了 332 变成 233
- 如果当前数字比后一位小 后一位之前的所有数变成9 后一位-1
- 一直往后遍历
代码
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int monotoneIncreasingDigits(int N) {
vector<int> nums;
while(N){
int t = N%10;
nums.push_back(t);
N /= 10;
}
for(int i = 0; i < nums.size()-1; i++){
if(nums[i] < nums[i+1]){
for(int j = 0; j <= i;j++)
nums[j] = 9;
nums[i+1]--;
}
}
int ans = 0,t = 1;
for(int i = 0;i <nums.size();i++){
ans += t*nums[i];
t *= 10;
}
return ans;
}
};
int main()
{
int n = 387;
Solution s;
cout<<s.monotoneIncreasingDigits(n)<<endl;
return 0;
}
今天也是爱zz的一天哦!