556 下一个更大元素 III

本文最后更新于:2022年4月9日 中午

给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1

注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1

示例 1:

1
2
输入:n = 12
输出:21

示例 2:

1
2
输入:n = 21
输出:-1

提示:

  • 1 <= n <= 231 - 1

Solution

方法同 31 下一个排列

img
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int nextGreaterElement(int n) {
string s = to_string(n);
for (int i = s.size()-2; i >= 0; --i) {
if (s[i] < s[i+1]) {
int j = s.size() - 1;
while (j >= 0 && s[i] >= s[j]) j--;
swap(s[i], s[j]);
reverse(s.begin()+i+1, s.end());
long res = stol(s);
return res <= INT_MAX ? res : -1;
}
}
return -1;
}
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!