# 0640. Solve the Equation

<https://leetcode.com/problems/solve-the-equation>

## Description

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

**Example 4:**

```
**Input:** equation = "2x+3x-6x=x+2"
**Output:** "x=-1"
```

**Example 5:**

```
**Input:** equation = "x=x+2"
**Output:** "No solution"
```

**Constraints:**

* `3 <= equation.length <= 1000`
* `equation` has exactly one `'='`.
* `equation` consists of integers with an absolute value in the range `[0, 100]` without any leading zeros, and the variable `'x'`.

## ac

```java
class Solution {
    public String solveEquation(String equation) {
        String[] strs = equation.split("=");
        int[] l = extract(strs[0]);
        int[] r = extract(strs[1]);

        int right = r[0] - l[0];
        int left = l[1] - r[1];

        if (left == 0 && right == 0) {
            return "Infinite solutions";
        } else if (left == 0 && right != 0) {
            return "No solution";
        } else {
            return "x=" + (int)(right / left);
        }
    }

    public int[] extract(String s) {
        String[] strs = s.split("-");
        int val = 0, xval = 0;
        for (int i = 0; i < strs.length; i++) {
            if (strs[i].length() == 0) continue; // skip empty
            String[] vals = strs[i].split("\\+");
            for (int j = 0; j < vals.length; j++) {
                int sign = i != 0 && j == 0 ? -1 : 1;
                if (vals[j].indexOf("x") < 0) { // normal value
                    val += sign * Integer.parseInt(vals[j]);
                } else if ("x".equals(vals[j])) {
                    xval += sign * 1;
                } else {
                    xval += sign * Integer.parseInt(vals[j].replace("x", ""));
                }
            }
        }

        return new int[]{val, xval};
    }
}

/*
1) extract the formula, return {normalVal, x-val}; 2) judge left part and right part
*/
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jaywin.gitbook.io/leetcode/solutions/0640-solve-the-equation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
