• 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 }
  • 相关阅读:
    如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件
    hbase rowkey 设计
    hbase集群region数量和大小的影响
    为什么不建议在hbase中使用过多的列簇
    hive explode 行拆列
    通过livy向CDH集群的spark提交任务
    case when多条件
    spark sql/hive小文件问题
    SQL join
    spark任务调度模式,动态资源分配
  • 原文地址:https://www.cnblogs.com/nilbook/p/13450112.html
Copyright © 2020-2023  润新知