Skip to content

Instantly share code, notes, and snippets.

@mkdika
Created June 26, 2018 03:22
Show Gist options
  • Select an option

  • Save mkdika/8fca5b10619f2569a62c30faedd3dd25 to your computer and use it in GitHub Desktop.

Select an option

Save mkdika/8fca5b10619f2569a62c30faedd3dd25 to your computer and use it in GitHub Desktop.
/**
*
* @author Maikel Chandika (mkdika@gmail.com)
*/
public class NextSmallerNumber2 {
public static void main(String[] args) {
System.out.println(nextSmaller(21)); //12
System.out.println(nextSmaller(531)); //513
System.out.println(nextSmaller(907)); //790
System.out.println(nextSmaller(2071)); //2017
System.out.println(nextSmaller(544123)); // 543421
System.out.println(nextSmaller(315)); // 153
System.out.println(nextSmaller(9)); //-1
System.out.println(nextSmaller(111)); //-1
System.out.println(nextSmaller(135)); //-1
System.out.println(nextSmaller(1027)); //-1
System.out.println(nextSmaller(13966337089L)); // 13966330987
}
static long nextSmaller(long n) {
char[] carr = String.valueOf(n).toCharArray();
int len = carr.length, i;
for (i = len - 1; i > 0; i--) {
if (carr[i] < carr[i - 1]) break;
}
if (i == 0) return -1;
else {
int x = carr[i - 1], min = i;
for (int j = i + 1; j < len; j++) {
if (carr[j] < x && carr[j] > carr[min]) {
min = j;
}
}
char temp = carr[i-1];
carr[i-1] = carr[min];
carr[min] = temp;
String[] sarr = String.valueOf(carr).split("");
java.util.Arrays.sort(sarr, i, len, java.util.Collections.reverseOrder());
long r = Long.valueOf(String.join("", sarr));
return String.valueOf(r).length() == len ? r : -1;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment