Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive 32-bit integer exists, you need to return -1.
Example 1:
Input: 12
Output: 21
Example 2:
Input: 21
Output: -1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
从右往左找,找到第一个比右边小的数字,把这个数字替换成右边找过的数字中第一个比它大的数字,替换后,右边的数字升序排列。例如:
数字13544422,找到第一个比右边小的数字,即是3,然后再找一遍,找到第一个比他大的数字,4,替换,变成了14544322,把后边的数字,升序排列,就是把544322升序,变成223445,最后结果就是14223445.
class Solution {
public int nextGreaterElement(int n) {
if (n <= 10) {
return -1;
}
String num = String.valueOf(n);
int index = num.length() - 2;
while (index >= 0) {
if (num.charAt(index) < num.charAt(index + 1)) {
break;
}
index--;
}
if (index == -1) {
return -1;
}
int findExchange = num.length() - 1;
String ans = "";
while (true) {
if (num.charAt(index) < num.charAt(findExchange)) {
String back = num.substring(index + 1, findExchange) + num.substring(findExchange + 1) + num.charAt(index);
char[] chars = back.toCharArray();
Arrays.sort(chars);
ans = num.substring(0, index) + num.charAt(findExchange) + String.valueOf(chars);
break;
}
findExchange--;
}
long result = Long.parseLong(ans);
if (result > Integer.MAX_VALUE) {
return -1;
}
return (int)result;
}
}