Giả sử chúng ta có một số nguyên không âm N, chúng ta phải tìm số lớn nhất nhỏ hơn hoặc bằng N với các chữ số tăng đơn điệu. Chúng ta biết rằng một số nguyên có các chữ số tăng đơn điệu nếu và chỉ khi mỗi cặp chữ số liền kề 'x và y thỏa mãn x <=y.) Vì vậy, nếu đầu vào là 332, thì kết quả sẽ là 299.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- s:=N dưới dạng chuỗi, i:=1, n:=kích thước của s
- while i
=s [i - 1] - tăng tôi lên 1
- nếu tôi
- while i> 0 and s [i - 1]> s [i], then
- giảm i đi 1
- giảm s [i] đi 1
- while i> 0 and s [i - 1]> s [i], then
- s [j]:=‘9’
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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)); }
Đầu vào
332
Đầu ra
299