【
求解一个给定的方程,将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' 组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/solve-the-equation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
这道题主要就是各种细节处理,居然有0x这种写法。。。
1. 遇见'='号时,相当于遇见+号处理,然后flag = 1这样
2. 0x这种恶心的表达式要特殊处理
3. 最后一位如果时数字的话,需要再计算一次
4. equation[i] 是不是0,应该与 '0' 比较
int sum;
int xnum;
int lastf;
int flag;
void addfunc(int temp)
{
if (lastf == flag) {
sum -= temp;
} else {
sum += temp;
}
lastf = 0;
}
void delfunc(int temp)
{
if (lastf == flag) {
sum -= temp;
} else {
sum += temp;
}
lastf = 1;
}
void xfunc(int i, char * equation, int temp)
{
if (i > 0 && equation[i - 1] == '0') {
temp = 0;
} else {
temp = temp == 0 ? 1 : temp;
}
if (lastf == flag) {
xnum += temp;
} else {
xnum -= temp;
}
}
char * solveEquation(char * equation){
int len = strlen(equation);
int i;
int temp = 0;
xnum = 0;
sum = 0;
flag = 0; // = 号左边
lastf = 0; // +号
char *retarr = malloc(sizeof(char) * 8);
memset(retarr, 0 , sizeof(char) * 8);
while(equation[i] != '\0') {
if (equation[i] == '+') {
addfunc(temp);
temp = 0;
} else if (equation[i] == '-') {
delfunc(temp);
temp = 0;
} else if (equation[i] == 'x') {
xfunc(i, equation, temp);
temp = 0;
} else if (equation[i] == '=') {
addfunc(temp);
temp = 0;
flag = 1; // 右边了
} else {
temp = temp * 10 + equation[i] - '0';
}
i++;
}
if (isdigit(equation[i - 1])) { // 最后一位如果是数字的话
if (lastf == flag) {
sum -= temp;
} else {
sum += temp;
}
}
if (xnum == 0 && sum == 0) {
return "Infinite solutions";
} else if (xnum == 0 && sum != 0) {
return "No solution";
}
int val = sum / xnum;
sprintf(retarr, "x=%d", val);
return retarr;
}