LeetCode(556) - 下一个更大元素 III

556. 下一个更大元素 III


题目描述

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于 n。如果不存在这样的32位整数,则返回-1。

示例 1:

输入: 12
输出: 21

示例 2:

输入: 21
输出: -1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解题说明

先把数字转成 char[],然后从数组末尾开始遍历,对于第 i 个数字,寻找 [i + 1, N - 1] 中有没有比它大的,
如果有,就交换两个元素,然后再把 i 后面的元素从小到大排序。这样得到的数字就是下一个更大的元素,再把 char[] 转回数字。
注意这时候可能溢出,如果溢出的话就返回 -1

class Solution {
    public int nextGreaterElement(int n) {
        char[] num = String.valueOf(n).toCharArray();
        
        for (int i = num.length - 2; i >= 0; i--) {
            for (int j = num.length - 1; j > i; j--) {
                if (num[j] > num[i]) {
                    char tmp = num[i];
                    num[i] = num[j];
                    num[j] = tmp;
                    
                    Arrays.sort(num, i + 1, num.length);
                    
                    int res = -1;
                    try {
                        res = Integer.parseInt(new String(num));
                     } catch (Exception e) {
                        res = -1;    
                     }
                
                    return res;
                }
            }
        }
        
        return -1;
    }
}