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?