 GeeksforGeeks App
Open App Browser
Continue

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

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

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