为什么80%的码农都做不了架构师?>>>   

问题:

Solve a given equation and return the value of x in the form of string "x=#value". The equation contains only '+', '-' operation, the variable x and its coefficient.

If there is no solution for the equation, return "No solution".

If there are infinite solutions for the equation, return "Infinite solutions".

If there is exactly one solution for the equation, we ensure that the value of x is an integer.

Example 1:

Input: "x+5-3+x=6+x-2"
Output: "x=2"

Example 2:

Input: "x=x"
Output: "Infinite solutions"

Example 3:

Input: "2x=x"
Output: "x=0"

Example 4:

Input: "2x+3x-6x=x+2"
Output: "x=-1"

Example 5:

Input: "x=x+2"
Output: "No solution"

解决:

① 解方程。难点在于处理字符串,如何将x的系数合并起来,将常数合并起来,化简成ax=b的形式来求解。

例:
x + 5 -2x = 6-3x;
leftPart:tokens= {x,+ 5,-2x}; 系数为x = 1-2 = -1; 常数= 5;
rightPart:tokens = {6,-3x}; 系数为x = -3; 常数= 6;

最终结果=(6-5)/(-1 - ( - 3))

class Solution { //12ms
    public String solveEquation(String equation) {
        String[] parts = equation.split("=");
        int[] leftPart = evaluate(parts[0]);
        int[] rightPart = evaluate(parts[1]);
        if (leftPart[0] == rightPart[0] && leftPart[1] == rightPart[1]){
            return "Infinite solutions";
        }else if (leftPart[0] == rightPart[0]){
            return "No solution";
        }
        return "x=" + (rightPart[1] - leftPart[1]) / (leftPart[0] - rightPart[0]);
    }
    public int[] evaluate(String str){
        String[] tokens = str.split("(?=[+-])");//()匹配组; ?=匹配并包含在res中; [+ - ]表示+或 - ;
        int[] res = new int[2];//记录系数为x; 系数为常数
        for (String token : tokens){
            if (token.equals("+x") || token.equals("x")){
                res[0] ++;// x表示1x
            }else if (token.equals("-x")){
                res[0] --;
            }else if (token.contains("x")){
                res[0] += Integer.parseInt(token.substring(0,token.length() - 1));
            }else{
                res[1] += Integer.parseInt(token);
            }

}
        return res;
    }
}

② 在discuss中看到的,思路相同。

class Solution { //9ms
    public String solveEquation(String equation) {
        if(equation == null || equation.length() == 0) return "No solution";
        String[] sides = equation.split("=");
        int[] left = parse(sides[0]), right = parse(sides[1]);
        if(left[0] == right[0]) {
            if(left[1] == right[1]) return "Infinite solutions";
            return "No solution";
        }
        int val = (right[1] - left[1]) / (left[0] - right[0]);
        return "x=" + val;
    }
    
    private int[] parse(String s) {
        int sign = 1, val = 0;
        int[] res = new int[2];
        for(int i = 0; i < s.length(); i ++) {
            char c = s.charAt(i);
            if(c == 'x') {
                if(i == 0) res[0] ++;
                else if(s.charAt(i-1) == '-' || s.charAt(i-1) == '+') res[0] += sign;
                else res[0] += sign * val;
                val = 0;
            } else if(c == '-' || c == '+') {
                res[1] += sign * val;
                val = 0;
                sign = c == '-' ? -1 : 1;
            } else {
                val = val * 10 + c - '0';
            }
        }
        res[1] += sign * val;
        return res;
    }
}

转载于:https://my.oschina.net/liyurong/blog/1606460

求方程的解 Solve the Equation相关推荐

  1. 求方程的解(简化版)

    题目描述: 输入a.b.c求一元二次方程ax2+bx+c=0的两个实数根(a不等于0,不考虑无解的情况). 输入格式: 一行,为a,b,c,每个数用空格隔开. 输出格式: 共一行,两个方程的解用一个空 ...

  2. 求具体方程的解的c语言程序,怎样用c语言求方程的解

    满意答案 #include int main() { int a,b,i,j; for(i=0;i<10000;i++) { for(j=0;j<10000;j++) { if((66*i ...

  3. java牛顿切线法求解方程组,牛顿迭代法求方程的解

    迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题.迭代法又分为精确迭代和近似迭代."二分法"和"牛顿 ...

  4. matlab求方程在X附近的根,matlab 实验03 求代数方程的近似根(解)

    实验三 求代数方程的近似根(解) 求代数方程的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当是一次多项式时,称 ...

  5. 数值分析——求方程解的不动点迭代法和斯特芬森法(Python实现)

    一.不动点迭代法求方程的解 import sympy #迭代的方程为 f(x)=pow(x,3)-x-1 def psi(x):return pow(x+1,1/3)def dif(x0): #求导函 ...

  6. HDU 2199 Can you solve this equation?【二分查找】

    解题思路:给出一个方程 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,求方程的解. 首先判断方程是否有解,因为该函数在实数范围内是连续的,所以只需使y的值满足f(0)< ...

  7. Go语言求平方根与解高次方程以及公式推导

    求平方根,都有函数可以直接得到,比如:math.Sqrt(n),如果我们不使用这个api,要如何得到平方根的值呢?我们通过公式推导,甚至推广到可以很方便的解高次方程. package mainimpo ...

  8. 使用单变量求解求一元方程的解

    求解一元方程是常用的数学方法.在学校学习中,已经了解求解一元二次方程的方法,但对于更高次的方程和带有正弦余弦函数的方程,就不可使用该方法了.Excel提供一个单变量求解功能,让方程的求解变得简单. 下 ...

  9. matlab|求方程(组)根(零点/验证洛必达/求单调区间与驻点)

    本博文源于matlab,旨在探讨用matlab实现求方程的根,方程组的根,一定范围内求零点,指定初始点求解零点,验证洛必达法则,求单调区间与驻点. 求方程的根 solve(f,x) 例子:求方程x^2 ...

最新文章

  1. Struts2 action之间相互跳转传递参数
  2. python多进程打印输出_python 多进程日志 logging
  3. AI让边缘更智能,边缘让AI无处不在
  4. 设计模式:接口隔离原则
  5. 玩转oracle 11g(41):rman备份-00554或者04005
  6. Program type already present: android.support.design.widget.xx
  7. ShutIt:一个基于Python的shell自动化框架
  8. swiper切换按钮位置改变_2019-01-18左右按钮控制swiper轮播图切换
  9. JS 字符串全部替换 ,replace (/ /g,'')
  10. 全新自助任务平台WQ源码对接微信带分类信息线报完美运营驴赚网全量开源发布
  11. 深度学习推荐系统--协同过滤推荐算法+实现代码
  12. ps自定义形状工具_Acorn for Mac(轻量级图片处理工具)
  13. javascript 图(Graphs)算法与说明
  14. Windows 下 Spark+Hadoop+Scala 安装
  15. 【愚公系列】2022年04月 密码学攻击-RSA之共模和模不互素
  16. 九宫格构图学习[1]
  17. qt类似电视盒子的通过方向键切换焦点的实现方法
  18. 内容为王,如何打造爆款小红书笔记?
  19. HC32L130国产超低功耗华大MCU芯片介绍
  20. b2b、c2c、B2C、B2B2C分别是什么意思?有什么区别?

热门文章

  1. python 运行时间 装饰器_python 装饰器统计某个函数的运行时间
  2. php seaslog安装,浅谈win10下安装php seaslog扩展的方法
  3. 遗传算法求函数最大值实验_小知识:什么是遗传算法
  4. android如何阻塞主线程,Android-Android如何避免阻塞主线程
  5. php poi,GitHub - satthi/poi-php: poi-php
  6. python非贪婪匹配_Python中关于正则表达式非贪婪以及多行匹配功能详解
  7. 查询linux版本信息 sp,查看Linux系统版本和内核信息
  8. 2021高考成绩查询大连,2021年大连高考各高中成绩及本科升学率数据排名及分析...
  9. Python练习之 对文件进行创建,然后重命名文件最近进行文件删除
  10. 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误