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