https://leetcode.com/problems/solve-the-equation/description/
题目大意:给你一个有x,+,-组成的算式,计算x的值。
解题思路:split分割成两边,分别统计x和数字的多少,最后比较。
用Java写的时候遇到了一点问题,我想用一个函数实现统计x和数字的多少,但是Java里函数传入的参数 是int的时候没有指针的概念,得包装成一个对象。
class Solution {
private void fun(Myvalue x,String s)
{
int xNum = x.x;
int val = x.v;
s+="+";
int len =s.length();
int pre =-1; // -1 表示前面是空; 1表示前面是x ; 2表示前面是符号; 3表示前面是数字
int f = 1; // 1表示+ -1表示-
int num =0;
for(int i=0;i<len;i++)
{
char tmp = s.charAt(i);
if(tmp>='0' && tmp<='9')
{
num = num*10+(tmp-'0') ;
pre= 3;
}
else if(tmp=='x')
{
if(pre == 3)
{
if(f==-1)
xNum -= num;
else
xNum += num;
num=0;
pre=1;
}
else
{
if(f==-1)
xNum-=1;
else
xNum+=1;
pre=1;
}
}
else
{
if(pre==1)
;
else if(pre==3)
{
if(f==1)
val+=num;
else
val-=num;
num=0;
}
pre=2;
if(tmp=='+') f=1;
else f=-1;
}
}
x.x = xNum;
x.v = val;
// System.out.println(xNum+" "+val);
}
public String solveEquation(String equation) {
String[] s=equation.split("=");
// Integer leftxNum=new Integer(0),rightxNum=new Integer(0),left=new Integer(0),right=new Integer(0);
Myvalue left = new Myvalue(0,0),right=new Myvalue(0,0);
fun(left,s[0]);
fun(right,s[1]);
// System.out.println(left.x+" "+right.x);
int x = left.x - right.x ;
int v = right.v-left.v;
if(x==0 && v==0)
return "Infinite solutions";
else
{
if(x!=0)
{
if( v/x * x ==v)
return "x="+String.valueOf(v/x) ;
}
return "No solution";
}
}
}
class Myvalue{
int x;
int v;
public Myvalue(int x, int v) {
this.x = x;
this.v = v;
}
}