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这里分三步:
1、从右向左找第一个不符合升序的数,位置记为index,如果index为-1,返回-1
2、从右向index找第一个比他大的数,交换index位置的数和这个比他大的数
3、从index+1到末尾进行升序排列
还需要防止溢出,所以用long保存结果。代码如下:
public class Solution {
public int nextGreaterElement(int n) {
char[] chs = (n + "").toCharArray();
int index = chs.length - 2;
while (index >= 0) {
if (chs[index] >= chs[index + 1]) {
index --;
} else {
break;
}
}
if (index == -1) {
return -1;
} else {
int j = chs.length - 1;
while (chs[j] <= chs[index]){
j --;
}
char temp = chs[j];
chs[j] = chs[index];
chs[index] = temp;
Arrays.sort(chs, index + 1, chs.length);
}
long res = Long.parseLong(new String(chs));
return res > Integer.MAX_VALUE? -1: (int)res;
}
}