题目
给你一个正整数 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); } };