【LeetCode】556. 下一個更大元素 III
阿新 • • 發佈:2018-12-14
題目描述
給定一個32位正整數 n,你需要找到最小的32位整數,其與 n 中存在的位數完全相同,並且其值大於n。如果不存在這樣的32位整數,則返回-1。
示例
輸入: 12 輸出: 21
輸入: 21 輸出: -1
解決方法
將n中每一位取出存入vector容器中,即可轉化成第31題求下一個排列的問題
class Solution {
public:
int nextGreaterElement(int n) {
// 將n中每一位取出,轉化成31. 下一個排列的題
//第一步,將n每一位取出存入vector
vector< int> nums;
while(n){
nums.push_back(n%10);
n/=10;
}
reverse(nums.begin(),nums.end());
//第二步,求下一個排列
int pos=-1;
for (int i=nums.size()-1;i>=1;i--){
if (nums[i]>nums[i-1]){
pos=i-1;
break ;
}
}
if (pos!=-1){ //若pos==-1,則這是一個降序序列,表示不存在下一個更大元素
for (int i=nums.size()-1;i>=pos+1;i--){
if (nums[i]>nums[pos]){
swap(nums[i],nums[pos]);
break;
}
}
reverse (nums.begin()+pos+1,nums.end());
}
else return -1;
//第三步,從vector取出每一位轉化成int型
long int result=0;
for (int i=0;i<nums.size();i++) result=result*10+nums[i];
if (result>INT_MAX) return -1;
return result;
}
};