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;
}
}