给定一个32位整数n,用同样的数字组成新的32位整数,使得它要比n大,返回最小的这样的数。如果不存在这样的整数,返回-1。
样例
样例 1:
输入: 12
输出: 21
样例 2:
输入: 21
输出: -1
class Solution {
public:
/**
* @param n: an integer
* @return: the smallest 32-bit integer which has exactly the same digits existing in the integer n and is greater in value than n
*/
int nextGreaterElement(int n)
{
// Write your code here
string tmp = std::to_string(n);
string ret = nextPermutation(tmp);
long num = stol(ret);
if(num == n || num > INT_MAX)
return -1;
return num;
}
string nextPermutation(string &nums)
{
// write your code here
int size = nums.size();
if(size == 1)
return nums;
int i = 0;
int j = -1;
int k = -1;
for(i=size-1; i>=0; i--)
{
if(nums[i]>nums[i-1] && i >= 1)
{
j=i-1;
break;
}
}
if( j == -1)
{
return nums;
}
for(i=size-1; i>=0; i--)
{
if(nums[i] > nums[j])
{
k=i;
break;
}
}
int tmp = nums[j];
nums[j] = nums[k];
nums[k] = tmp;
sort(nums.begin()+j+1, nums.end());
return nums;
}
};