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 nand 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
int nextGreaterElement(int n) { // time: O(len); space: O(len)
string num = to_string(n);
int len = num.length();
int i, j;
for (i = len - 1; i > 0; --i) {
if (num[i - 1] < num[i]) break;
}
if (i == 0) return -1;
for (j = len - 1; j >= i; --j) {
if (num[j] > num[i - 1]) {
swap(num[i - 1], num[j]);
break;
}
}
reverse(num.begin() + i, num.end());
long res = stol(num);
return res > INT_MAX ? -1 : (int)res;
}
Last updated
Was this helpful?