给你一个正整数 n
,请你找出符合条件的最小整数,其由重新排列 n
中存在的每位数字组成,并且其值大于 n
。如果不存在这样的正整数,则返回 -1
。
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1
。
示例 1:
输入:n = 12 输出:21
示例 2:
输入:n = 21 输出:-1
提示:
1 <= n <= 231 - 1
import java.util.Arrays;
public class Solution556 {
public int nextGreaterElement(int n) {
int out = -1;
char temp = '0';
String s = String.valueOf(n);
char[] a = s.toCharArray();
l: for (int i = a.length - 1; i > -1; i--) {
for (int j = a.length - 1; j > i; j--) {
if (a[j] > a[i]) {
temp = a[j];
a[j] = a[i];
a[i] = temp;
Arrays.sort(a, i + 1, a.length);
break l;
}
}
}
// System.out.println(Arrays.toString(a));
String str = new String(a);
// System.out.println(str);
Long l = Long.parseLong(str);
if (l > Integer.MAX_VALUE) {
out = -1;
} else {
if (Integer.parseInt(str) > n) {
out = Integer.parseInt(str);
}
}
return out;
}
public static void main(String[] args) {
Solution556 sol = new Solution556();
int n = 230241;
System.out.println(sol.nextGreaterElement(n));
}
}