解题思路
看到题目的时候第一反应是挺简单的,解析两边的字符串,然后找到x的系数和数字的大小,就找到了解。
但是实际处理的时候,要考虑很多情况,当前符号的正反、x没有系数的时候、最关键的是题目还要考虑x的系数可能为0,多种条件判断吧,反正做着挺恶心的。
代码
public class Solution {
public String solveEquation(String equation) {
String[] strings = equation.split("=");
String left = strings[0];
String right = strings[1];
int[] string = parseString(left);
int[] string1 = parseString(right);
int num_x=string[0]-string1[0];
int num=string1[1]-string[1];
if (num_x==0 && num==0) return "Infinite solutions";
else if (num_x==0 && num!=0) return "No solution";
else return "x="+num/num_x;
}
public int[] parseString(String s){
int t = 0;
s=s+'+'; //让最后一个数字也能被处理
int num_x = 0, num_ = 0;
boolean flag = true; //记录当前符号的正反,是+还是-
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'x') {
if (flag) {
if (t == 0) {
//看看是不是0x=0这种情况
if (i==0 || s.charAt(i-1)!='0')
num_x += 1;
}
else num_x += t;
}else {
if (t==0) {
if (i == 0 || s.charAt(i - 1) != '0')
num_x -= 1;
}
else num_x-=t;
}
t = 0;
} else if (s.charAt(i) == '+') {
if (flag) {
num_ += t;
} else num_ -= t;
flag = true;
t=0;
} else if (s.charAt(i) == '-') {
if (flag) {
num_ += t;
} else num_ -= t;
flag = false;
t=0;
} else {
t *= 10;
t += (int)(s.charAt(i)-'0');
}
}
int[] ans=new int[2];
ans[0]=num_x;
ans[1]=num_;
return ans;
}
}