下一个更大元素 III

参考:https://www.cnblogs.com/mr-stn/p/9004673.html 感谢!!

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

示例 1:

输入: 12
输出: 21
示例 2:

输入: 21
输出: -1


class Solution {
public:
    static bool cmp(int a, int b){return a > b;}
    int nextGreaterElement(int n) {
        vector<int> num;
        int old = n;
        while(n){
            num.push_back(n%10);
            n /= 10;
        }
        size_t len = num.size();
        size_t i;
        for(i = 1;i < len;i++){
            if(num[i] < num[i - 1]){
                break;
            }
        }
        if(i == len)    return -1;
        sort(num.begin(), num.begin()+i, cmp);
        for(int j = i-1; j >= 0; j--){
           if(num[j] > num[i]){
               swap(num[j], num[i]);
               break;
           }
        }
        int w = 1;
        int res = 0;
        for(size_t k = 0;k < len;k++){
            res += num[k]*w;
            w *= 10;
        }
        return (res > old) ?res:-1;
    }
};

你可能感兴趣的:(杂记)