求解一个给定的方程,将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"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/solve-the-equation
class Solution {
public:
string solveEquation(string equation) {
int x = equation.find("=");
string s1=equation.substr(0, x);
string s2=equation.substr(x+1);
int x1=0, x2=0, y1=0, y2=0;
count(s1, x1, y1);
count(s2, x2, y2);
if(x1==x2 && y1==y2){
return "Infinite solutions" ;
}
else if(x1==x2 && y1!=y2){
return "No solution" ;
}
else{
string str;
stringstream ss;
ss << (y2-y1)/(x1-x2);
ss >> str;
return "x=" + str;
}
}
void count(string s, int &x, int &y){
int num=0, sign=1; //sign=1为正,-1为负
for(int i=0; i<s.size(); ++i){
if(s[i]=='x'){ //遇到x之后num清零
if(i-1>=0 && s[i-1]=='0') //特判0x=0
continue;
if(num==0){
x += sign;
}
else{
x += sign*num;
num=0;
}
}
else if(s[i]=='+'){ //遇到运算符计数清零
y += num*sign; //之前是x就是加0,否则加一个数
num = 0;
sign = 1; //下一个数的符号
}
else if(s[i]=='-'){
y += sign*num;
num = 0;
sign = -1;
}
else{ //数字
num = num*10+(s[i]-'0');
}
}
if(num!=0){
y += sign*num;
}
}
};