1. 程式人生 > >【LeetCode】556. 下一個更大元素 III

【LeetCode】556. 下一個更大元素 III

題目描述

給定一個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; } };