给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。
示例 1:
输入: 12
输出: 21
示例 2:
输入: 21
输出: -1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int nextGreaterElement(int n)
{
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;
}
};