Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Find minimum value expression by inserting addition or multiplication operator between digits of given number

  • Last Updated : 26 Oct, 2021

Given string str that contains only digits, the task is to return an expression by inserting the ‘+’ or ‘*’ operator between every two digits such that the arithmetic value of the expression is minimized.

Example

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: str = “322”
Output: “3+2*2”
Explanation: The value of above expression is 7 which is minimum possible over the other expressions “3+2+2”, “3*2+2”, “3*3*2”

Input: str = “391118571”
Output: “3+9*1*1*1+8+5+7*1”



 

Approach: The given problem can be solved using a greedy approach. Follow the steps below to solve the problem:

  • If the string str contains character ‘0’ then:
    • Insert multiplication operator between every character of the string
  • Else create a string ans to store the iterate the string and if the current character str[i] is:
    • ‘1’, then Insert multiplication operator ‘*’ between the current and previous character
    • not ‘1’ then Insert addition operator ‘+’ between the current and previous character

Below is the implementation of the above approach:

C++




// C++ implementation for the above approach
 
#include <bits/stdc++.h>
using namespace std;
string minimalExpression(string str)
{
    // Initialize an empty string
    // to store the answer
    string ans = "";
 
    ans.push_back(str[0]);
 
    bool iszero = false;
 
    // Check if zero is present in the
    // string
    for (int i = 0; i < str.size();
         i++) {
        if (str[i] == '0') {
            iszero = true;
        }
    }
 
    // Insert all multiplication operators
    // between every digit of the string
    if (iszero) {
        for (int i = 1; i < str.size();
             i++) {
            ans.push_back('*');
            ans.push_back(str[i]);
        }
        return ans;
    }
 
    // Else calculate minimum expression
    // with combination of '*' and '+'
    // operators between digits
    for (int i = 1; i < str.size(); i++) {
 
        // If current character is '1' insert
        // multiplication operator between
        // current and previous character
        if (str[i] == '1') {
            ans.push_back('*');
            ans.push_back(str[i]);
        }
 
        // Else insert addition operator
        // between current and
        // previous character
        else {
            ans.push_back('+');
            ans.push_back(str[i]);
        }
    }
 
    // Return the result
    return ans;
}
 
// Driver Code
int main()
{
    string str = "391118571";
    cout << minimalExpression(str);
}

Java




// Java implementation for the above approach
class GFG {
 
    public static String minimalExpression(String str) {
        // Initialize an empty String
        // to store the answer
        String ans = "";
 
        ans = ans + str.charAt(0);
 
        boolean iszero = false;
 
        // Check if zero is present in the
        // String
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '0') {
                iszero = true;
            }
        }
 
        // Insert all multiplication operators
        // between every digit of the String
        if (iszero) {
            for (int i = 1; i < str.length(); i++) {
                ans += '*';
                ans += str.charAt(i);
            }
            return ans;
        }
 
        // Else calculate minimum expression
        // with combination of '*' and '+'
        // operators between digits
        for (int i = 1; i < str.length(); i++) {
 
            // If current character is '1' insert
            // multiplication operator between
            // current and previous character
            if (str.charAt(i) == '1') {
                ans += '*';
                ans += str.charAt(i);
            }
 
            // Else insert addition operator
            // between current and
            // previous character
            else {
                ans += '+';
                ans += str.charAt(i);
            }
        }
 
        // Return the result
        return ans;
    }
 
    // Driver Code
    public static void main(String args[]) {
        String str = "391118571";
        System.out.println(minimalExpression(str));
    }
}
 
// This code is contributed by saurabh_jaiswal.

Python3




# python implementation for the above approach
def minimalExpression(str):
 
    # Initialize an empty string
    # to store the answer
    ans = ""
    ans += str[0]
    iszero = False
 
    # Check if zero is present in the
    # string
    for i in range(0, len(str)):
        if (str[i] == '0'):
            iszero = True
 
    # Insert all multiplication operators
    # between every digit of the string
    if (iszero):
        for i in range(1, len(str)):
            ans += '*'
            ans += str[i]
 
        return ans
 
    # Else calculate minimum expression
    # with combination of '*' and '+'
    # operators between digits
    for i in range(1, len(str)):
 
        # If current character is '1' insert
        # multiplication operator between
        # current and previous character
        if (str[i] == '1'):
            ans += '*'
            ans += str[i]
 
        # Else insert addition operator
        # between current and
        # previous character
        else:
            ans += '+'
            ans += str[i]
 
    # Return the result
    return ans
 
# Driver Code
if __name__ == "__main__":
 
    str = "391118571"
    print(minimalExpression(str))
 
# This code is contributed by rakeshsahni

C#




// C# implementation for the above approach
 
using System;
class GFG {
    static string minimalExpression(string str)
    {
       
        // Initialize an empty string
        // to store the answer
        string ans = "";
 
        ans += str[0];
 
        bool iszero = false;
 
        // Check if zero is present in the
        // string
        for (int i = 0; i < str.Length; i++) {
            if (str[i] == '0') {
                iszero = true;
            }
        }
 
        // Insert all multiplication operators
        // between every digit of the string
        if (iszero) {
            for (int i = 1; i < str.Length; i++) {
                ans += '*';
                ans += (str[i]);
            }
            return ans;
        }
 
        // Else calculate minimum expression
        // with combination of '*' and '+'
        // operators between digits
        for (int i = 1; i < str.Length; i++) {
 
            // If current character is '1' insert
            // multiplication operator between
            // current and previous character
            if (str[i] == '1') {
                ans += '*';
                ans += (str[i]);
            }
 
            // Else insert addition operator
            // between current and
            // previous character
            else {
                ans += '+';
                ans += (str[i]);
            }
        }
 
        // Return the result
        return ans;
    }
 
    // Driver Code
    public static void Main()
    {
        string str = "391118571";
        Console.WriteLine(minimalExpression(str));
    }
}
 
// This code is contributed by ukasp.

Javascript




<script>
// Javascript implementation for the above approach
 
function minimalExpression(str) {
  // Initialize an empty string
  // to store the answer
  let ans = [];
 
  ans.push(str[0]);
 
  let iszero = false;
 
  // Check if zero is present in the
  // string
  for (let i = 0; i < str.length; i++) {
    if (str[i] == "0") {
      iszero = true;
    }
  }
 
  // Insert all multiplication operators
  // between every digit of the string
  if (iszero) {
    for (let i = 1; i < str.length; i++) {
      ans.push("*");
      ans.push(str[i]);
    }
    return ans;
  }
 
  // Else calculate minimum expression
  // with combination of '*' and '+'
  // operators between digits
  for (let i = 1; i < str.length; i++) {
    // If current character is '1' insert
    // multiplication operator between
    // current and previous character
    if (str[i] == "1") {
      ans.push("*");
      ans.push(str[i]);
    }
 
    // Else insert addition operator
    // between current and
    // previous character
    else {
      ans.push("+");
      ans.push(str[i]);
    }
  }
 
  // Return the result
  return ans.join("");
}
 
// Driver Code
 
let str = "391118571";
document.write(minimalExpression(str));
 
// This code is contributed by saurabh_jaiswal.
</script>

 
 

Output
3+9*1*1*1+8+5+7*1

 

Time Complexity: O(N)
Auxiliary Space: O(N), where N is the length of the given string

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!