LeedCode刷题:640.求解方程

解题思路:

1.先将表达式里的减号“-”用replaceAll全换成“+-”,可以简化减号和加号运算

2.将方程式以=分为左右两个式子后,再将两个式子以“+”号分割成两个字符串数组leftArray和rightArray来进行cal计算

3.将每个式子的x的系数和常数d的系数以cal方法计算出来,

读取字符串part[i],处理含x和不含x的项,通过iscontainsX方法判断含x,方法最终返回一个{x,d}的数组

4.然后在主方法体里进行细节计算,讨论无解和无限解,以及正常解的情况

 1 class Solution {
 2     public String solveEquation(String equation) {
 3         equation=equation.replaceAll("-","+-");//将-号化为+-号
 4         String left=equation.substring(0,equation.indexOf("="));//分割成两个子串,左表达式
 5         String right=equation.substring(equation.indexOf("=")+1,equation.length());//右表达式
 6         String []leftArray=left.split("\\+");//以+分割字符串存入字符串数组
 7         String []rightArray=right.split("\\+");
 8         int l[]=cal( leftArray);//计算,返回x和常数d的系数
 9         int r[]=cal( rightArray);
10         if(l[0]==r[0]&&l[1]==r[1]){//x系数和d的系数均为0,则无限解
11             return "Infinite solutions";
12         }else if(l[0]==r[0]&&(l[1]-r[1])!=0){//x系数为0,常数系数不为0,无解
13             return "No solution";
14         }else{
15             if(l[0]>r[0]){//左表达式x系数大于右表达式x系数
16                 return "x="+(r[1]-l[1])/(l[0]-r[0]);//则右常数-左常数/x系数差
17             }else{
18                 return "x="+(l[1]-r[1])/(r[0]-l[0]);//则左常数-右常数/x系数差
19             }
20         }
21     }
22     public int []cal(String []part){
23         int x=0;
24         int d=0;
25         for(int i=0;i<part.length;i++){
26             String a=part[i];
27             if(a.equals("")){
28                 continue;
29             }
30             if(isContainsX(a)){//处理含x的项
31                 if(a.equals("-x")){
32                     x+=-1;
33                 }else if(a.equals("x")){
34                     x+=1;
35                 }else{
36                     a=a.replace("x","");//遇到如3x,4x,5x这类x的系数不是1或-1的,则将x删掉只剩下系数,再将系数转为int加入x的系数
37                     x+=Integer.parseInt(a);
38                 }
39             }else{//不含x则为常数
40                 d+=Integer.parseInt(a);
41             }
42         }
43         return new int []{x,d};
44     }
45     public boolean isContainsX(String a){
46         return a.contains("x");
47     }
48 }

 

posted @ 2020-08-07 02:28  nilbook  阅读(80)  评论(0编辑  收藏  举报