C++ 中的单调递增数字
如果我们有一个非负整数 N,我们必须找到小于或等于 N 的最大数字,并且数字呈单调递增。我们知道一个整数具有单调递增的数字,当且仅当每一对相邻的数字 x 和 y 满足 x <= y。)因此,如果输入类似于 332,则结果将为 299。
为解决这个问题,我们将遵循以下步骤 −
- s := N 作为字符串、i := 1、n := s 的大小
- while i < n 且 s[i] >= s[i – 1]
- 增加 i 1 个
- 如果 i < n
- while i > 0 且 s[i – 1] > s[i],那么
- 减少 i 1 个
- 减少 s[i] 1 个
- while i > 0 且 s[i – 1] > s[i],那么
- 对于范围 i + 1 到 n 的 j
- s[j] := ‘9’
- 返回 s 作为数字
让我们看看以下实施以获得更好的理解 −
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: int monotoneIncreasingDigits(int N) { string s = to_string(N); int i = 1; int n = s.size(); while(i < n && s[i] >= s[i - 1]) i++; if( i < n) while(i > 0 && s[i - 1] > s[i]){ i--; s[i]--; } for(int j = i + 1; j < n; j++)s[j] = '9'; return stoi(s); } }; main(){ Solution ob; cout << (ob.monotoneIncreasingDigits(332)); }
输入
332
输出
299
广告