# 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 ``using` `namespace` `std;``string minimalExpression(string str)``{``    ``// Initialize an empty string``    ``// to store the answer``    ``string ans = ``""``;` `    ``ans.push_back(str);` `    ``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;` `        ``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

 ``

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