题目
求解一个给定的方程,将x以字符串 “x=#value” 的形式返回。该方程仅包含 ‘+’ , ‘-’ 操作,变量 x 和其对应系数。
如果方程没有解,请返回 “No solution” 。如果方程有无限解,则返回 “Infinite solutions” 。
题目保证,如果方程中只有一个解,则 ‘x’ 的值是一个整数。
示例 1:
输入: equation = “x+5-3+x=6+x-2”
输出: “x=2”
示例 2:
输入: equation = “x=x”
输出: “Infinite solutions”
示例 3:
输入: equation = “2x=x”
输出: “x=0”
提示:
3 <= equation.length <= 1000
equation 只有一个 ‘=’.
方程由绝对值在 [0, 100] 范围内且无任何前导零的整数和变量 ‘x’ 组成。
题解
逐个遍历处理
等号右边的可以看作移到左边,即+变 - ,- 变 +
还要注意x的系数的处理
class Solution {
public:
string solveEquation(string equation) {
int x = 0;//x系数
int sign = 1;//符号
int sum = 0;//常数和
int len = equation.length();
int leftOrright = 1;//等式左or右
for(int i=0;i<len;i++)
{
if(equation[i] == '+')
{
sign = 1;
}
else if(equation[i] == '-')
{
sign = -1;
}
else if(equation[i] == '=')
{
sign = 1;
leftOrright = -1;
}
else
{
int num = 0;
bool flag = false;//标志是否遇到了整数,没遇到的话就代表只遇到了x,这时要单独处理
//获取遇到的整数值
while(i<len && isdigit(equation[i]))
{
num = num*10+equation[i++]-'0';
flag = true;
}
num = num*sign*leftOrright;//加符号
if(equation[i]=='x')
{
if(flag)
x += num;
else
x += 1*sign*leftOrright;
}
else
{
sum += num;
i--;
}
}
}
if(x!=0)
return "x="+to_string(-sum/x);
else
return sum==0 ? "Infinite solutions" : "No solution";
}
};