1. 程式人生 > >556. 下一個更大元素 III

556. 下一個更大元素 III

給定一個32位正整數 n,你需要找到最小的32位整數,其與 中存在的位數完全相同,並且其值大於n。如果不存在這樣的32位整數,則返回-1。

示例 1:

輸入: 12
輸出: 21

示例 2:

輸入: 21
輸出: -1

class Solution {
public:
    int nextGreaterElement(int n) {
        string str = to_string(n);
        int len = str.size(), i = len - 1;
        for (; i > 0; --i) {
            if (str[i] > str[i - 1]) break;
        }
        if (i == 0) return -1;
        for (int j = len - 1; j >= i; --j) {
            if (str[j] > str[i - 1]) {
                swap(str[j], str[i - 1]);
                break;
            }
        }
        sort(str.begin() + i, str.end());
        long long res = stoll(str);
        return res > INT_MAX ? -1 : res;
    }
};