# Largest number with one swap allowed

Given a positive integer, find the largest number that could be generated by swapping only two digits at most once.

Examples:

```Input: 2736
Output : 7236
Explanation:
If we swap the number 2 and the number
7 then the generated number would be
the largest number.

Input : 432
Output : 432
Explanation:
Here, no swap is required. The given
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach 1 (Trying every pair):
We convert the number to a string. For each digit of the number, we will swap with positions (i, j) and store it as temp check if the temp is larger than number. If yes then swap back to restore the original number.

## C++

 `// code to find largest number with ` `// given conditions. ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// function to find the largest number ` `// with given conditions. ` `int` `largestNum(``int` `num) ` `{ ` `    ``// converting the number to the string ` `    ``string num_in_str = to_string(num); ` `    ``string temp = num_in_str; ` ` `  `    ``// swamping each digit ` `    ``for` `(``int` `i = 0; i < num_in_str.size(); i++) { ` `        ``for` `(``int` `j = i + 1; j < num_in_str.size(); j++) { ` ` `  `            ``// Swapping and checking for the larger ` `            ``swap(num_in_str[i], num_in_str[j]); ` `            ``if` `(stoi(num_in_str) > stoi(temp)) ` `                ``temp = num_in_str; ` ` `  `            ``// Reverting the changes ` `            ``swap(num_in_str[i], num_in_str[j]); ` `        ``} ` `    ``} ` ` `  `    ``return` `stoi(temp); ` `} ` ` `  `// driver function ` `int` `main() ` `{ ` `    ``int` `num = 432; ` `    ``cout << largestNum(num) << endl; ` `    ``num = 2736; ` `    ``cout << largestNum(num) << endl; ` `    ``num = 4596; ` `    ``cout << largestNum(num) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java code to find largest number ` `// with given conditions. ` `public` `class` `LargestNumber { ` ` `  `    ``static` `String swap(String str, ``int` `i, ``int` `j) ` `    ``{ ` `        ``char` `ch[] = str.toCharArray(); ` `        ``char` `temp = ch[i]; ` `        ``ch[i] = ch[j]; ` `        ``ch[j] = temp; ` `        ``String c = String.valueOf(ch); ` `        ``return` `c; ` `    ``} ` ` `  `    ``// function to find the largest number ` `    ``// with given conditions. ` `    ``static` `int` `largestNum(``int` `num) ` `    ``{ ` `        ``// converting the number to the string ` `        ``String num_in_str = ``""` `+ num; ` `        ``String temp = num_in_str; ` ` `  `        ``// swamping each digit ` `        ``for` `(``int` `i = ``0``; i < num_in_str.length(); i++) { ` `            ``for` `(``int` `j = i + ``1``; j < num_in_str.length(); ` `                 ``j++) { ` ` `  `                ``// Swapping and checking for the larger ` `                ``num_in_str = swap(num_in_str, i, j); ` `                ``if` `(temp.compareTo(num_in_str) < ``0``) ` `                    ``temp = num_in_str; ` ` `  `                ``// Reverting the changes ` `                ``num_in_str = swap(num_in_str, i, j); ` `            ``} ` `        ``} ` ` `  `        ``return` `Integer.parseInt(temp); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] s) ` `    ``{ ` `        ``int` `num = ``423``; ` `        ``System.out.println(largestNum(num)); ` `        ``num = ``2736``; ` `        ``System.out.println(largestNum(num)); ` `        ``num = ``4596``; ` `        ``System.out.println(largestNum(num)); ` `    ``} ` `} ` ` `  `// This code is contributed by Prerena Saini `

## Python3

 `# python3 code to find the largest  ` `# number with given conditions. ` ` `  `# function to find the largest number ` `def` `largestNum(num): ` ` `  `    ``# converting the number to the list ` `    ``num_to_str ``=` `list``(``str``(num)) ` `    ``temp ``=` `num_to_str[:] ` ` `  `    ``# swaping each digit and check for ` `    ``# the largest number ` `    ``for` `i ``in` `range``(``len``(num_to_str)): ` `        ``for` `j ``in` `range``(i ``+` `1``, ``len``(num_to_str)): ` ` `  `            ``/``/` `Swapping current pair ` `            ``num_to_str[i], num_to_str[j] ``=` `num_to_str[j], num_to_str[i] ` `            ``if` `num_to_str > temp: ` `                ``temp ``=` `num_to_str[:] ` ` `  `            ``# Reverting above change before next iteration  ` `            ``num_to_str[i], num_to_str[j] ``=` `num_to_str[j], num_to_str[i] ` ` `  `    ``# returning the largest number. ` `    ``return` `int``("".join(temp)) ` ` `  `# main function ` `def` `main(): ` `    ``A ``=` `int``(``432``) ` `    ``print``(largestNum(A)) ` `    ``A ``=` `int``(``2736``) ` `    ``print``(largestNum(A)) ` `    ``A ``=` `int``(``4596``) ` `    ``print``(largestNum(A)) ` ` `  `# calling main function ` `if` `__name__``=``=``"__main__"``: ` `    ``main() `

## C#

 `// C# code to find largest number ` `// with given conditions. ` `using` `System; ` ` `  `public` `class` `LargestNumber { ` ` `  `    ``static` `String swap(String str, ``int` `i, ``int` `j) ` `    ``{ ` `        ``char``[] ch = str.ToCharArray(); ` `        ``char` `temp = ch[i]; ` `        ``ch[i] = ch[j]; ` `        ``ch[j] = temp; ` `        ``String c = String.Join(``""``, ch); ` `        ``return` `c; ` `    ``} ` ` `  `    ``// function to find the largest number ` `    ``// with given conditions. ` `    ``static` `int` `largestNum(``int` `num) ` `    ``{ ` `        ``// converting the number to the string ` `        ``String num_in_str = ``""` `+ num; ` `        ``String temp = num_in_str; ` ` `  `        ``// swamping each digit ` `        ``for` `(``int` `i = 0; i < num_in_str.Length; i++) { ` `            ``for` `(``int` `j = i + 1; j < num_in_str.Length; ` `                 ``j++) { ` ` `  `                ``// Swapping and checking for the larger ` `                ``num_in_str = swap(num_in_str, i, j); ` `                ``if` `(temp.CompareTo(num_in_str) < 0) ` `                    ``temp = num_in_str; ` ` `  `                ``// Reverting the changes ` `                ``num_in_str = swap(num_in_str, i, j); ` `            ``} ` `        ``} ` `        ``return` `Convert.ToInt32(temp); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] s) ` `    ``{ ` `        ``int` `num = 423; ` `        ``Console.WriteLine(largestNum(num)); ` `        ``num = 2736; ` `        ``Console.WriteLine(largestNum(num)); ` `        ``num = 4596; ` `        ``Console.WriteLine(largestNum(num)); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```432
7236
9546
```

Approach 2 (Efficient) :
We will scan the number from backward direction. In the scan, if the ith digit is the largest by far, store it and its index or if the current digit is smaller than the largest digit recorded by far, this digit and the largest digit are the best suitable for swap.

Below is the implementation of the above approach.

## C++

 `// code to find largest number with ` `// given conditions. ` `#include ` `using` `namespace` `std; ` ` `  `// function to find the largest number ` `// with given conditions. ` `int` `largestNum(``int` `num) ` `{ ` `    ``int` `max_digit = -1; ` `    ``int` `max_digit_indx = -1; ` `    ``int` `l_indx = -1; ` `    ``int` `r_indx = -1; ` ` `  `    ``// converting the number to string ` `    ``string num_in_str = to_string(num); ` `    ``for` `(``int` `i = num_in_str.size() - 1; i >= 0; i--) { ` ` `  `        ``// current digit is the largest by far ` `        ``if` `(num_in_str[i] > max_digit) { ` `            ``max_digit = num_in_str[i]; ` `            ``max_digit_indx = i; ` `            ``continue``; ` `        ``} ` ` `  `        ``// best digit for swap if there is no more ` `        ``// such situation on the left side ` `        ``if` `(num_in_str[i] < max_digit) { ` `            ``l_indx = i; ` `            ``r_indx = max_digit_indx; ` `        ``} ` `    ``} ` ` `  `    ``// check for is number already in order ` `    ``if` `(l_indx == -1) ` `        ``return` `num; ` ` `  `    ``swap(num_in_str[l_indx], num_in_str[r_indx]); ` ` `  `    ``return` `stoi(num_in_str); ` `} ` ` `  `// driver function ` `int` `main() ` `{ ` `    ``int` `num = 789; ` `    ``cout << largestNum(num) << endl; ` `    ``num = 49658; ` `    ``cout << largestNum(num) << endl; ` `    ``num = 2135; ` `    ``cout << largestNum(num) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java to find largest number with ` `// given conditions. ` `class` `GFG { ` ` `  `    ``// function to find the largest number ` `    ``// with given conditions. ` `    ``static` `int` `largestNum(``int` `num) ` `    ``{ ` `        ``int` `max_digit = -``1``; ` `        ``int` `max_digit_indx = -``1``; ` `        ``int` `l_indx = -``1``; ` `        ``int` `r_indx = ``1``; ` ` `  `        ``// converting the number to string ` `        ``String num_in_str = String.valueOf(num); ` `        ``for` `(``int` `i = num_in_str.length() - ``1``; i >= ``0``; i--) { ` `            ``// current digit is the largest by far ` `            ``if` `(num_in_str.charAt(r_indx) > max_digit) { ` `                ``max_digit = num_in_str.charAt(i); ` `                ``max_digit_indx = i; ` `                ``continue``; ` `            ``} ` ` `  `            ``// best digit for swap if there is no more ` `            ``// such situation on the left side ` `            ``if` `(num_in_str.charAt(i) < max_digit) { ` `                ``l_indx = i; ` `                ``r_indx = max_digit_indx; ` `            ``} ` `        ``} ` ` `  `        ``// check for is number already in order ` `        ``if` `(l_indx == -``1``) ` `            ``return` `num; ` ` `  `        ``num_in_str = swap(num_in_str, l_indx, r_indx); ` ` `  `        ``return` `Integer.parseInt(num_in_str); ` `    ``} ` `    ``static` `String swap(String arr, ``int` `i, ``int` `j) ` `    ``{ ` `        ``char` `temp[] = arr.toCharArray(); ` `        ``char` `c = temp[i]; ` `        ``temp[i] = temp[j]; ` `        ``temp[j] = c; ` `        ``return` `String.valueOf(temp); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `num = ``789``; ` `        ``System.out.println(largestNum(num)); ` `        ``num = ``49658``; ` `        ``System.out.println(largestNum(num)); ` `        ``num = ``2135``; ` `        ``System.out.println(largestNum(num)); ` `    ``} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## Python3

 `# Python3 to find largest number with  ` `# given conditions. ` ` `  `# Function to find the largest number  ` `# with given conditions. ` `def` `largestNum(num): ` `    ``max_digit ``=` `-``1` `    ``max_digit_indx ``=` `-``1` `    ``l_indx ``=` `-``1` `    ``r_indx ``=` `1` ` `  `    ``# converting the number to string ` `    ``num_in_str ``=` `list``(``str``(num)) ` `    ``for` `i ``in` `range``(``len``(num_in_str) ``-` `1``, ``-``1``, ``-``1``): ` `         `  `        ``# current digit is the largest by far ` `        ``if` `int``(num_in_str[r_indx]) > ``int``(max_digit): ` `            ``max_digit ``=` `num_in_str[i] ` `            ``max_digit_indx ``=` `i ` `            ``continue` ` `  `        ``# best digit for swap if there is no more  ` `        ``# such situation on the left side ` `        ``if` `int``(num_in_str[i]) < ``int``(max_digit): ` `            ``l_indx ``=` `i ` `            ``r_indx ``=` `max_digit_indx ` ` `  `    ``# check for is number already in order ` `    ``if` `l_indx ``=``=` `-``1``: ` `        ``return` `num ` ` `  `    ``num_in_str[l_indx], num_in_str[r_indx] ``=` `\ ` `    ``num_in_str[r_indx], num_in_str[l_indx]  ` ` `  `    ``return` `int``(''.join(num_in_str)) ` ` `  `# Driver Code ` `num ``=` `789` `print``(largestNum(num)) ` `num ``=` `49658` `print``(largestNum(num)) ` `num ``=` `2135` `print``(largestNum(num)) ` ` `  `# This code is contributed by Gowtham Yuvaraj `

## C#

 `// C# to find largest number with ` `// given conditions. ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``// function to find the largest number ` `    ``// with given conditions. ` `    ``static` `int` `largestNum(``int` `num) ` `    ``{ ` `        ``int` `max_digit = -1; ` `        ``int` `max_digit_indx = -1; ` `        ``int` `l_indx = -1; ` `        ``int` `r_indx = 1; ` ` `  `        ``// converting the number to string ` `        ``String num_in_str = String.Join(``""``, num); ` `        ``for` `(``int` `i = num_in_str.Length - 1; i >= 0; i--) { ` `            ``// current digit is the largest by far ` `            ``if` `(num_in_str[r_indx] > max_digit) { ` `                ``max_digit = num_in_str[i]; ` `                ``max_digit_indx = i; ` `                ``continue``; ` `            ``} ` ` `  `            ``// best digit for swap if there is no more ` `            ``// such situation on the left side ` `            ``if` `(num_in_str[i] < max_digit) { ` `                ``l_indx = i; ` `                ``r_indx = max_digit_indx; ` `            ``} ` `        ``} ` ` `  `        ``// check for is number already in order ` `        ``if` `(l_indx == -1) ` `            ``return` `num; ` ` `  `        ``num_in_str = swap(num_in_str, l_indx, r_indx); ` ` `  `        ``return` `int``.Parse(num_in_str); ` `    ``} ` `    ``static` `String swap(String arr, ``int` `i, ``int` `j) ` `    ``{ ` `        ``char``[] temp = arr.ToCharArray(); ` `        ``char` `c = temp[i]; ` `        ``temp[i] = temp[j]; ` `        ``temp[j] = c; ` `        ``return` `String.Join(``""``, temp); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``int` `num = 789; ` `        ``Console.WriteLine(largestNum(num)); ` `        ``num = 49658; ` `        ``Console.WriteLine(largestNum(num)); ` `        ``num = 2135; ` `        ``Console.WriteLine(largestNum(num)); ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

Output:

```987
94658
5132
``` My Personal Notes arrow_drop_up If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.