556. Next Greater Element III
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive 32-bit integer exists, you need to return -1.
Example 1:
Input: 12
Output: 21
Example 2:
Input: 21
Output: -1
方法1:
官方题解:https://leetcode.com/problems/next-greater-element-iii/solution/
思路:
class Solution {
public:
int nextGreaterElement(int n) {
string num = to_string(n);
int len = num.size();
int i = len - 1;
for (; i > 0; i--) if (num[i] > num[i - 1]) break;
if (i == 0) return -1;
int j = len - 1;
--i;
for (; j > i; j--) if (num[j] > num[i]) break;
swap(num[i], num[j]);
reverse(num.begin() + i + 1, num.end());
return stoll(num) > INT_MAX || stoll(num) < INT_MIN ? -1 : stoi(num);
}
};