模板
从后往前找到第一次降序的位置,将这个点换成比之前大的最小数,将后面的数字转变为尽量小(转化为升序)。
下一个排列(LeetCode31)
class Solution {  public int nextGreaterElement(int n) {  String s = String.valueOf(n);  int k = s.length() - 1;  while (k > 0 && s.charAt(k - 1) >= s.charAt(k)) {  k--;  }  if (k == 0) {  return -1;  }  int t = k;  while (t + 1 < s.length() && s.charAt(t + 1) > s.charAt(k - 1)) {  t++;  }  // Swap characters  char temp = s.charAt(k - 1);  s = s.substring(0, k - 1) + s.charAt(t) + s.substring(k, t) + temp + s.substring(t + 1);  // Reverse substring from k to end  StringBuilder sb = new StringBuilder(s.substring(k));  s = s.substring(0, k) + sb.reverse().toString();  long r = Long.parseLong(s);  if (r > Integer.MAX_VALUE) {  return -1;  }  return (int) r;  }  
}