Problem: Write a program in Java to output the next largest number using the same digits if possible or else output the same.
Example:
Input: 123 Output: 132 Input: 1465 Output: 1546
The trick is to look (from right) for the digit (say a[i]
) that is greater than the digit at its left (say a[i-1]
).
If found then look for the digit (say min
) at the right of index ‘i’ which is smaller than a[i]
but greater than a[i-i].
Swap a[i-1]
and min
.
Sort all the digits after min
in the ascending order.
The final outcome will be the nearest greatest integer using the same digits.
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
//Input a number and transform it to a char array
System.out.print("Enter a number: ");
char a[]=in.next().toCharArray();
//store the length of number in 'n'
int i, n=a.length;
//check from back for a[i-1] < a[i]
for(i=n-1; i>0; i--){
if(a[i-1] < a[i])
break;
}
//If 'i' value reaches 0, it means digits are in descending order
//Hence, we cannot form any higher number using the same digits
if(i==0){
for(i=0; i<n; i++)
System.out.print(a[i]);
}
else{
//If found then look for (a[i-1] < min < a[i]) after a[i]
int min=i;
for(int j=i+1; j<n; j++){
//if found then copy its index to min
if (a[j]>a[i-1] && a[j]<a[min]){
min = j;
}
}
//swap a[i-1] and a[min]
char temp = a[i-1];
a[i-1] = a[min];
a[min] = temp;
//sort all after min (i.e. after i inclusive) in ascending order
Arrays.sort(a, i, n);
//output the result
System.out.print("Next greater number: ");
System.out.print(a);
}
}
}
Output:
Enter a number: 1465
Next greater number: 1546
As you can see, we were successfully able to find the next largest number using the same digits in Java.