题目描述
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(单调递增:当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y )
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/monotone-increasing-digits
思路
- 将int转换为string
- 从string最后一位往前遍历,若当前位置比其前一位大,则继续往前遍历;否则,将原数字赋值为原数字减去从当前位开始所组成的数字,再减去1。即,若数字为329,遍历到index为1时,不满足要求,即329-29-1。因为减去任何一个比30小的数字,都不能使得第1位的数字比第0位大。
代码(CPP)
#include <string>
#include <sstream>
using namespace std;
class Solution {
public:
int monotoneIncreasingDigits(int N) {
if (N < 10) {
return N;
}
stringstream ss;
ss << N;
string s = ss.str();
int i = s.length() - 1;
while (i > 0) {
if (s[i] >= s[i - 1]) {
i -= 1;
continue;
}
stringstream ss2;
string minus = s.substr(i, s.length() - i);
N = N - stoi(minus) - 1;
ss2 << N;
s = ss2.str();
i -= 1;
}
return N;
}
};