参考: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;
}
};