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
思路:代码参考 Next Permuation, copy过来,将n转换成int array,处理,特殊情况判断一下:如果计算出来的next permutation > n, 则return,否则return -1,另外还有超出Integer.MAX_VALUE的情况,也要return -1;
class Solution {
public int nextGreaterElement(int n) {
String num = String.valueOf(n);
int[] A = new int[num.length()];
for(int i = 0; i < A.length; i++) {
A[i] = num.charAt(i) - '0';
}
nextPermutation(A);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < A.length; i++) {
sb.append(A[i]);
}
long value = Long.parseLong(sb.toString());
return (value > Integer.MAX_VALUE || value <= n) ? -1 : (int)value;
}
public void nextPermutation(int[] nums) {
int n = nums.length;
int i = n - 2;
for(; i >= 0; i--) {
if(nums[i] < nums[i + 1]) {
break;
}
}
if(i < 0) {
reverse(nums, 0, n - 1);
return;
}
int j = n - 1;
while(j > i) {
if(nums[j] > nums[i]) {
break;
} else {
j--;
}
}
swap(nums, i, j);
reverse(nums, i + 1, n - 1);
}
private void swap(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
private void reverse(int[] A, int start, int end) {
while(start <= end) {
swap(A, start, end);
start++;
end--;
}
}
}