Permutation of a number whose sum with the original number is equal to another given number

• Last Updated : 25 May, 2021

Given two integers A and C, the task is to check if there exists a permutation of the number A such that the sum of the number A and its permutation is equal to C.

Examples:

Input: A = 133, C = 446
Output: Yes
Explanation: One of the permutation of A is 313. Therefore, sum = 133 + 313 = 446, which is equal to C.

Input: A = 200, C = 201
Output: No

Naive Approach: The simplest approach to solve the problem is to generate all permutations of the number A and add it with the original value of A. Now, check if their sum is equal to C or not.

Time Complexity: O((log10A)!)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the idea is to subtract the value of A from C and check if there exists a permutation of A which is equal to the difference between C and A or not. Follow the steps below to solve the problem:

• Subtract A from C and check if C is less than 0 or not. If found to be true, then print “No”.
• Otherwise, perform the following steps:

Below is the implementation of the above approach:

C++

 // C++ program for the above approach#include using namespace std; // Function to check if there// exists a permutation of a number// A whose sum with A results to Cvoid checkPermutation(int a, int c){    // Subtract a from c    c -= a;     // Check if c is less than 0    if (c <= 0) {         // If true, print "No"        cout << "No";        return;    }     // Otherwise, convert a to its    // equivalent string    string s = to_string(a);     // convert c to its    // equivalent string    string k = to_string(c);     // Sort string s    sort(s.begin(), s.end());     // Sort string k    sort(k.begin(), k.end());     // If both strings are equal,    // then print "Yes"    if (k == s) {        cout << "Yes\n"             << c;    }     // Otherwise, print "No"    else {        cout << "No";    }} // Driver Codeint main(){    int A = 133, C = 446;    checkPermutation(A, C);     return 0;}

Java

 // Java program for the above approachimport java.util.*; class GFG{     // Function to check if there// exists a permutation of a number// A whose sum with A results to Cstatic void checkPermutation(int a, int c){         // Subtract a from c    c -= a;     // Check if c is less than 0    if (c <= 0)    {                 // If true, print "No"        System.out.println("No");        return;    }     // Otherwise, convert a to its    // equivalent string    String s = sortString(Integer.toString(a));     // Convert c to its    // equivalent string    String k = sortString(Integer.toString(c));     // If both strings are equal,    // then print "Yes"    if (k.equals(s))    {        System.out.println("Yes");        System.out.println(c);    }     // Otherwise, print "No"    else    {        System.out.println("No");    }} // Method to sort a string alphabeticallypublic static String sortString(String inputString){         // Convert input string to char array    char tempArray[] = inputString.toCharArray();           // sort tempArray    Arrays.sort(tempArray);           // Return new sorted string    return new String(tempArray);} // Driver codepublic static void main(String[] args){    int A = 133, C = 446;         checkPermutation(A, C);}} // This code is contributed by offbeat

Python3

 # Python3 program for the above approach # Function to check if there# exists a permutation of a number# A whose sum with A results to Cdef checkPermutation(a, c):    # Subtract a from c    c -= a     # Check if c is less than 0    if (c <= 0):        # If true, print "No"        print("No")        return     # Otherwise, convert a to its    # equivalent string    s = str(a)     # convert c to its    # equivalent string    k = str(c)     res = ''.join(sorted(s))     # Sort string s    s = str(res)     # Sort string k    res = ''.join(sorted(k))    k = str(res)     # If both strings are equal,    # then print "Yes"    if (k == s):        print("Yes")        print(c)     # Otherwise, print "No"    else:        print("No") # Driver Codeif __name__ == '__main__':    A = 133    C = 446    checkPermutation(A, C)         # This code is contributed by ipg2016107.

C#

 // C# program for the above approachusing System;class GFG{     // Function to check if there  // exists a permutation of a number  // A whose sum with A results to C  static void checkPermutation(int a, int c)  {         // Subtract a from c    c -= a;     // Check if c is less than 0    if (c <= 0) {       // If true, print "No"      Console.Write("No");      return;    }     // Otherwise, convert a to its    // equivalent string    string s = a.ToString();     // convert c to its    // equivalent string    string k = c.ToString();     // Sort string s    char[] arr = s.ToCharArray();    Array.Sort(arr);     // Sort string k    char[] brr = k.ToCharArray();    Array.Sort(brr);     // If both strings are equal,    // then print "Yes"    if (String.Join("", brr) == String.Join("", arr)) {      Console.Write("Yes\n" + c);    }     // Otherwise, print "No"    else {      Console.WriteLine("No");    }  }   // Driver Code  public static void Main()  {    int A = 133, C = 446;    checkPermutation(A, C);  }} // This code is contributed by ukasp.

Javascript


Output:
Yes
313

Time Complexity: O((log10A)*log (log10A))
Auxiliary Space: O(log10A)

My Personal Notes arrow_drop_up