求解一个给定的方程,将x
以字符串"x=#value"的形式返回。该方程仅包含'+',' - '操作,变量 x
和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x
是一个整数。
示例 1:
输入: "x+5-3+x=6+x-2" 输出: "x=2"
示例 2:
输入: "x=x" 输出: "Infinite solutions"
示例 3:
输入: "2x=x" 输出: "x=0"
示例 4:
输入: "2x+3x-6x=x+2" 输出: "x=-1"
示例 5:
输入: "x=x+2" 输出: "No solution"
class Solution {
public:
string solveEquation(string equation) {
int a = 0, b = 0;
auto found = equation.find("=");
helper(equation.substr(0, found), true, a, b);
helper(equation.substr(found + 1), false, a, b);
if (a == 0 && a == b) return "Infinite solutions";
if (a == 0 && a != b) return "No solution";
return "x=" + to_string(b / a);
}
void helper(string e, bool isLeft, int& a, int& b) {
int sign = 1, num = -1;
e += "+";
for (int i = 0; i < e.size(); ++i) {
if (e[i] == '-' || e[i] == '+') {
num = (num == -1) ? 0 : (num * sign);
b += isLeft ? -num : num;
num = -1;
sign = (e[i] == '+') ? 1 : -1;
} else if (e[i] >= '0' && e[i] <= '9') {
if (num == -1) num = 0;
num = num * 10 + e[i] - '0';
} else if (e[i] == 'x') {
num = (num == -1) ? sign : (num * sign);
a += isLeft ? num : -num;
num = -1;
}
}
}
};