Open In App

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

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

 



Last Updated : 26 Oct, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads