求解一个给定的方程,将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"
思路:一开始没看清题,自己yy出了一道题,写了tm200多行,发现题目已经局限这个方程是一次方程。。。wnm,亏我三分了半天。。一次方程就是个辣鸡题哇,直接求一波x的系数和常数项即可。只是有几个坑点自己注意一下即可。
class Solution {
public String solveEquation(String equation) {
int sum=0;
boolean right=false;
boolean isFushu=false;
int[] a=new int[2];
for(int i=0;i<equation.length();i++) {
if(equation.charAt(i)>='0' && equation.charAt(i)<='9') {
sum=sum*10+equation.charAt(i)-'0';
if(i==equation.length()-1) {
work(0,a,sum,isFushu,right);
continue;
}
}
else {
if(equation.charAt(i)=='x') {
if(i==0 || i>0 && (equation.charAt(i-1)<'0' || equation.charAt(i-1)>'9'))
sum=1;
work(1,a,sum,isFushu,right);
isFushu=false;
}
else {
if(i>0 && equation.charAt(i-1)!='x')
work(0,a,sum,isFushu,right);
isFushu=false;
if(equation.charAt(i)=='-') isFushu=true;
else if(equation.charAt(i)=='=') right=true;
}
sum=0;
}
}
if(a[1]==0 && a[0]!=0) return "No solution";
if(a[1]==0 && a[0]==0) return "Infinite solutions";
if(a[0]==0) return "x=0";
return "x="+String.valueOf(-a[0]/a[1]);
}
private void work(int id,int[] a,int sum,boolean isFushu,boolean right) {
a[id]+=((isFushu==true && right==false || isFushu==false && right==true)?-sum:sum);
}
}