Solve the Equation LeetCode Solution

Last updated on July 18th, 2024 at 09:46 pm

Here, We see Solve the Equation LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.

List of all LeetCode Solution

Topics

Math

Companies

Amazon

Level of Question

Medium

Solve the Equation LeetCode Solution

Solve the Equation LeetCode Solution

Problem Statement

Solve a given equation and return the value of 'x' in the form of a string "x=#value". The equation contains only '+''-' operation, the variable 'x' and its coefficient. You should return "No solution" if there is no solution for the equation, or "Infinite solutions" if there are infinite solutions for the equation.

If there is exactly one solution for the equation, we ensure that the value of 'x' is an integer.

Example 1:
Input: equation = “x+5-3+x=6+x-2”
Output: “x=2”

Example 2:
Input: equation = “x=x”
Output: “Infinite solutions”

Example 3:
Input: equation = “2x=x”
Output: “x=0”

1. Solve the Equation LeetCode Solution C++

class Solution {
    public:
    string solveEquation(string equation) {
        const string lhsEquation = equation.substr(0, equation.find('='));
        const string rhsEquation = equation.substr(equation.find('=') + 1);
        const auto& [lhsCoefficient, lhsConstant] = calculate(lhsEquation);
        const auto& [rhsCoefficient, rhsConstant] = calculate(rhsEquation);
        const int coefficient = lhsCoefficient - rhsCoefficient;
        const int constant = rhsConstant - lhsConstant;
        if (coefficient == 0 && constant == 0)
        return "Infinite solutions";
        if (coefficient == 0 && constant != 0)
        return "No solution";
        return "x=" + to_string(constant / coefficient);
    }
    private:
    pair<int, int> calculate(const string& s) {
        int coefficient = 0;
        int constant = 0;
        int num = 0;
        int sign = 1;
        for (int i = 0; i < s.length(); ++i) {
        const char c = s[i];
        if (isdigit(c))
            num = num * 10 + (c - '0');
        else if (c == '+' || c == '-') {
            constant += sign * num;
            sign = c == '+' ? 1 : -1;
            num = 0;
        } else {
            if (i > 0 && num == 0 && s[i - 1] == '0')
            continue;
            coefficient += num == 0 ? sign : sign * num;
            num = 0;
        }
        }
        return {coefficient, constant + sign * num};
    }
};

2. Solve the Equation LeetCode Solution Java

class Solution {
    public String solveEquation(String equation) {
        int x1 = 0,x2 = 0;
        int sum1=0,sum2=0;
        int sign = 1;
        int i=0;
        boolean flag = true;
        for(i=0;i<equation.length();i++){
            char ch = equation.charAt(i);
            if(ch == '=') flag = false;
            else if(ch == 'x'){
                if(flag) x1 += sign;
                else x2 += sign;
                sign = 1;
            }
            else if(Character.isDigit(ch)){
                int val =0;
                while(i<equation.length() && Character.isDigit(equation.charAt(i))){
                    val = val*10 + Character.getNumericValue(equation.charAt(i)); 
                    i++;
                }
                i--;
                if(i<equation.length()-1 && equation.charAt(i+1) == 'x'){
                    i++;
                    if(flag) x1+=sign * val;
                    else x2 += sign * val;
                }
                else{
                    if(flag)sum1 += sign * val;
                    else sum2 += sign * val;
                }
                sign = 1;
            }else if(ch == '-') sign = -1;
        }
        StringBuilder sb = new StringBuilder();
        if(x1==x2 && sum1 == sum2) return "Infinite solutions";
        else if(sum1 == 0 && sum2 == 0) return "x=0";
        else if(x1 == x2 && ((sum1!=0)||(sum2!=0))) return "No solution";
        int sum=0;
        int x=0;
        if(x1>x2){
            x = x1 - x2;
            sum = sum2-sum1;
            sum = sum/x;
        }
        else if(x2>x1){
            x = x2 - x1;
            sum = sum1-sum2;
            sum = sum/x;
        }
        sb.append("x=");
        sb.append(sum);
        return sb.toString();
    }
}

3. Solve the Equation LeetCode Solution JavaScript

var solveEquation = function(equation) {
    const [left, right] = equation.split('=');
    const [lsv,lsc] = solve(left);
    const [rsv,rsc] = solve(right);
    const [variable,constant] = [lsv-rsv,rsc-lsc];
    return !variable ? (lsc === rsc ? "Infinite solutions":
   "No solution") : `x=${constant / variable}`
};

const solve = equation => {
    let x = 0;
    let num = 0;
    for(let i = 0; i < equation.length; i++){
        if(equation[i] === "x"){
            if(equation[i - 1] === "+") x += 1;
            else if(equation[i - 1] === "-") x -= 1;
            else x = 1;
        }else if(!isNaN(equation[i])){
            let str = equation[i];
            let k = i + 1;
            while(!isNaN(equation[k])){
                str += equation[k];
                k++;
            }
            let res = equation[k] === "x" ? x : num;
            if(equation[i - 1] === "-") res -= parseInt(str)
            else if(equation[i - 1] === "+") res += parseInt(str);
            else res = parseInt(str)
            if(equation[k] === "x") x = res;
            else num = res;
            i = k;
        }
    }
    return [x,num]
}

4. Solve the Equation LeetCode Solution Python

class Solution(object):
    def solveEquation(self, equation):
        x = a = 0
        side = 1
        for eq, sign, num, isx in re.findall('(=)|([-+]?)(\d*)(x?)', equation):
            if eq:
                side = -1
            elif isx:
                x += side * int(sign + '1') * int(num or 1)
            elif num:
                a -= side * int(sign + num)
        return 'x=%d' % (a / x) if x else 'No solution' if a else 'Infinite solutions'
Scroll to Top