// 0640. Solve the Equation
class Solution {
public String solveEquation(String equation) {
equation += '+';
boolean beforeEqualSign = true;
boolean positive = true;
boolean isConstant = true;
int totalCoefficients = 0;
int totalConstants = 0;
int num = 0;
for (int i = 0; i < equation.length(); ++i) {
char charAtI = equation.charAt(i);
if (charAtI == '+' || charAtI == '-' || charAtI == '=') {
if (!positive) {
num *= -1;
}
if (isConstant) {
totalConstants += num;
} else {
totalCoefficients += num;
}
if (charAtI == '+') {
positive = beforeEqualSign;
} else if (charAtI == '-') {
positive = !beforeEqualSign;
} else {
positive = false;
beforeEqualSign = false;
}
isConstant = true;
num = 0;
} else if (charAtI == 'x') {
isConstant = false;
if (i == 0 || equation.charAt(i - 1) == '+' || equation.charAt(i - 1) == '=' || equation.charAt(i - 1) == '-') {
num = 1;
}
} else {
num = num * 10 + charAtI - 48;
}
}
totalConstants *= -1;
if (totalCoefficients == 0) {
if (totalConstants == 0) {
return "Infinite solutions";
} else {
return "No solution";
}
}
return "x=" + totalConstants / totalCoefficients;
}
}
学习笔记:
这道题就是简单的字符串题,也用到了基础的数学。
做这类简单等式,就是需要移项整理,把x移到左边,把常数项移到右边。
那这里为了方便就先都放左边,然后最后算完乘以-1。
这里有个小技巧就是在最后加一个符号,让最后的一个数字也可以正常计算。
特别要注意的是x如果没有系数,那系数可不是0,但是本身系数是0也有可能。
然后我还发现了java的基本数据类型里面boolean无法直接转化为int,int没有办法取反,这实在太麻烦了,很多巧妙的计算得走判断。