Skip to content
Related Articles

Related Articles

Improve Article

Nearest greater number by interchanging the digits

  • Last Updated : 08 Jun, 2021

Given two integers A and B. The task is to find the nearest greater value to B by interchanging the digits of A. If no such permutataion possible then print -1.
Examples: 
 

Input: A = 459, B = 500 
Output: 549 
549 is the nearest greater. 
Input: A = 321, B = 567 
Output: -1
Input: A = 231, B = 125 
Output: 132 

 

 

Prerequisites: All permutations of a string
Approach: 
 



  • Set the minimum value of min1 by using the Integer.MAX_VALUE
  • Interchange the digit of A by using above mentioned permutation method.
  • Check if the permutataion of A is less than min1 or not. If less then update min1 as A.
  • Repeat this for all permutataions of A and find the minimum greater value

Below is the implementation of the above approach : 
 

C++




// C++ program to find nearest greater value
#include <bits/stdc++.h>
using namespace std;
 
int min1 = INT_MAX;
int _count = 0;
 
// Find all the possible permutation of Value A.
int permutation(string str1, int i, int n, int p)
{
    if (i == n)
    {
        // Convert into Integer
        int q = stoi(str1);
 
        // Find the minimum value of A by interchanging
        // the digit of A and store min1.
        if (q - p > 0 && q < min1)
        {
            min1 = q;
            _count = 1;
        }
    }
    else
    {
        for (int j = i; j <= n; j++)
        {
            // Swap two string character
            swap(str1[i], str1[j]);
            permutation(str1, i + 1, n, p);
            swap(str1[i], str1[j]);
        }
    }
    return min1;
}
 
// Driver code
int main()
{
    int A = 213;
    int B = 111;
 
    // Convert integer value into string to
    // find all the permutation of the number
    string str1 = to_string(A);
    int len = str1.length();
    int h = permutation(str1, 0, len - 1, B);
 
    // count=1 means number greater than B exists
    _count ? cout << h << endl : cout << -1 << endl;
 
    return 0;
}
 
// This code is contributed by
// sanjeev2552

Java




// JAVA program to find nearest greater value
import java.io.*;
import java.util.*;
 
class GFG {
    static int min1 = Integer.MAX_VALUE;
    static int count = 0;
 
    // Find all the possible permutation of Value A.
    public int permutation(String str1, int i, int n, int p)
    {
 
        if (i == n) {
 
            // Convert into Integer
            int q = Integer.parseInt(str1);
 
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1) {
                min1 = q;
                count = 1;
            }
        }
 
        else {
            for (int j = i; j <= n; j++) {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
    }
 
    // Swap two string character
    public String swap(String str, int i, int j)
    {
        char ch[] = str.toCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        // Return the string after
        // swapping between two character.
        return String.valueOf(ch);
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        int A = 213;
        int B = 111;
 
        GFG gfg = new GFG();
 
        // Convert integer value into string to
        // find all the permutation of the number
        String str1 = Integer.toString(A);
        int len = str1.length();
        int h = gfg.permutation(str1, 0, len - 1, B);
 
        // count=1 means number greater than B exists
        if (count == 1)
            System.out.println(h);
        else
            System.out.println(-1);
    }
}

Python3




# Python3 program to find nearest greater value
min1 = 10**9
_count = 0
 
# Find all the possible permutation of Value A.
def permutation(str1, i, n, p):
    global min1, _count
    if (i == n):
         
        # Convert into Integer
        str1 = "".join(str1)
        q = int(str1)
 
        # Find the minimum value of A
        # by interchanging the digits
        # of A and store min1.
        if (q - p > 0 and q < min1):
            min1 = q
            _count = 1
    else:
        for j in range(i, n + 1):
             
            # Swap two character)
            str1[i], str1[j] = str1[j], str1[i]
            permutation(str1, i + 1, n, p)
            str1[i], str1[j] = str1[j], str1[i]
 
    return min1
 
# Driver code
A = 213
B = 111
 
# Convert integer value into to
# find all the permutation of the number
str2 = str(A)
str1 = [i for i in str2]
le = len(str1)
 
h = permutation(str1, 0, le - 1, B)
 
# count=1 means number greater than B exists
if _count == 1:
    print(h)
else:
    print(-1)
 
# This code is contributed by
# mohit

C#




// C# program to find nearest greater value
using System;
     
class GFG
{
    static int min1 = int.MaxValue;
    static int count = 0;
 
    // Find all the possible permutation of Value A.
    public int permutation(String str1, int i,
                                 int n, int p)
    {
        if (i == n)
        {
 
            // Convert into Integer
            int q = int.Parse(str1);
 
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1)
            {
                min1 = q;
                count = 1;
            }
        }
 
        else
        {
            for (int j = i; j <= n; j++)
            {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
    }
 
    // Swap two string character
    public String swap(String str, int i, int j)
    {
        char []ch = str.ToCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
         
        // Return the string after
        // swapping between two character.
        return String.Join("", ch);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int A = 213;
        int B = 111;
 
        GFG gfg = new GFG();
 
        // Convert integer value into string to
        // find all the permutation of the number
        String str1 = A.ToString();
        int len = str1.Length;
        int h = gfg.permutation(str1, 0, len - 1, B);
 
        // count=1 means number greater than B exists
        if (count == 1)
            Console.WriteLine(h);
        else
            Console.WriteLine(-1);
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript




<script>
// JAVAscript program to find nearest greater value
 
let min1 = Number.MAX_VALUE;
let count = 0;
 
// Find all the possible permutation of Value A.
function permutation(str1,i,n,p)
{
    if (i == n) {
   
            // Convert into Integer
            let q = parseInt(str1);
   
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1) {
                min1 = q;
                count = 1;
            }
        }
   
        else {
            for (let j = i; j <= n; j++) {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
}
 
 // Swap two string character
function swap(str,i,j)
{
    let ch = str.split("");
        let temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        // Return the string after
        // swapping between two character.
        return (ch).join("");
}
 
// Driver code
let A = 213;
        let B = 111;
   
   
        // Convert integer value into string to
        // find all the permutation of the number
        let str1 = A.toString();
        let len = str1.length;
        let h = permutation(str1, 0, len - 1, B);
   
        // count=1 means number greater than B exists
        if (count == 1)
            document.write(h);
        else
            document.write(-1);
 
 
 
// This code is contributed by unknown2108
</script>
Output: 
123

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :