diff --git a/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java b/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java index 7dcc369..a9b1b3e 100644 --- a/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java +++ b/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java @@ -5,6 +5,29 @@ public class BiggestNumber { public static long findTheNextBiggerNumber(long n) { //write your awesome code here - return n; + StringBuilder originalNumStr = new StringBuilder(String.valueOf(n)); + int numOfDigits = originalNumStr.length(); + return finderHelper(n, n, 1, numOfDigits); + } + private static long finderHelper(long originalNumber, long currentNumber, int index, int numOfDigits) { + if (currentNumber / 10 != 0) { + long swappedNumber; + swappedNumber = swap(originalNumber, numOfDigits - index, numOfDigits - index - 1); + if (swappedNumber > originalNumber) { + return swappedNumber; + } + return finderHelper(originalNumber, currentNumber / 10, index + 1, numOfDigits); + } else { + return -1; + } + } + + private static long swap(long number, int firstIndex, int secondIndex) { + StringBuilder numberStr = new StringBuilder(String.valueOf(number)); + char temp; + temp = numberStr.charAt(firstIndex); + numberStr.setCharAt(firstIndex, numberStr.charAt(secondIndex)); + numberStr.setCharAt(secondIndex, temp); + return Long.valueOf(numberStr.toString()); } } diff --git a/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java b/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java index 80291eb..0348af4 100644 --- a/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java +++ b/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java @@ -14,6 +14,7 @@ public void basicTests() { assertEquals(2071, BiggestNumber.findTheNextBiggerNumber(2017)); assertEquals(441, BiggestNumber.findTheNextBiggerNumber(414)); assertEquals(414, BiggestNumber.findTheNextBiggerNumber(144)); + assertEquals(-1, BiggestNumber.findTheNextBiggerNumber(7)); assertEquals(-1, BiggestNumber.findTheNextBiggerNumber(111)); assertEquals(-1, BiggestNumber.findTheNextBiggerNumber(531)); }