JAVA程序设计:求解方程(LeetCode:640)

求解一个给定的方程,将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);
    }
}
发布了987 篇原创文章 · 获赞 175 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/haut_ykc/article/details/103983743