当前位置:网站首页>leetcode-556:下一个更大元素 III

leetcode-556:下一个更大元素 III

2022-07-05 05:46:00 菊头蝙蝠

leetcode-556:下一个更大元素 III

题目

题目连接

给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。

注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。
示例 1:

输入:n = 12
输出:21

示例 2:

输入:n = 21
输出:-1

解题

leetcode-31:下一个排列相同的思路,只是要在它的基础上,多了溢出判断

方法一:

class Solution {
    
public:
    //溢出判断
    bool isValidInt(string& s){
    
        string maxS=to_string(INT_MAX);
        if(s.size()<maxS.size()) return true;
        for(int i=0;i<s.size();i++){
    
            if(s[i]>maxS[i]) return false;
            else if(s[i]==maxS[i]) continue;
            else if(s[i]<maxS[i]) return true;
        }
        return true;
    }

    int nextGreaterElement(int n) {
    
        string s=to_string(n);
        int len=s.size();
        int i=len-2,j=len-1;
        while(i>=0&&s[i]>=s[j]){
    
            i--;
            j--;
        }
        if(i<0) return -1;
        int k=len-1;
        while(s[i]>=s[k]){
    
            k--;
        }
        swap(s[i],s[k]);
        sort(s.begin()+i+1,s.end());

        if(!isValidInt(s)) return -1;
        else return stoi(s);
    }
};
原网站

版权声明
本文为[菊头蝙蝠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_21539375/article/details/125579993