Open In App

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

Last Updated : 26 Oct, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

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 <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

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads