代码求解方程

news/2024/7/7 19:54:25

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

求解一个给定的方程,将x以字符串 “x=#value” 的形式返回。该方程仅包含 ‘+’ , ‘-’ 操作,变量 x 和其对应系数。

如果方程没有解,请返回 “No solution” 。如果方程有无限解,则返回 “Infinite solutions” 。

题目保证,如果方程中只有一个解,则 ‘x’ 的值是一个整数。

示例 1:

输入: equation = "x+5-3+x=6+x-2"
输出: "x=2"

示例 2:

输入: equation = "x=x"
输出: "Infinite solutions"

示例 3:

输入: equation = "2x=x"
输出: "x=0"

提示:

3 <= equation.length <= 1000
equation 只有一个 '='.
equation 方程由整数组成,其绝对值在 [0, 100] 范围内,不含前导零和变量 'x'

思路分析

题目的意思很清楚,就是会给我们一个一元一次方程,我们需要求解方程,计算出其中变量x的取值。这是小学的题目,我相信基本每一位同学都可以快速的笔算或者说口算出来,但是要怎么让电脑去帮我们进行计算呢?那我们首先就要想一下自己是怎么进行计算的,然后将我们的方法告诉电脑,就可以让电脑来帮我们进行计算了。

首先让我们先来回顾一下一元二次方程的解题过程:

  • 1、合并同类项,分别对变量和常量进行合并求值
  • 2、移项化简求值

解题过程其实很简单,但我们要怎么将其写成代码呢?主要可以分成下面这几步:

  • 1、找出等式中的数值项运算符
let q = equation.split('=');
let symbol = [[],[]];
for(let j = 0; j < 2; j++){
    for(let i = 0; i < q[j].length; i++){
        if(q[j][i] == '+' || q[j][i] == '-'){
            symbol[j].push(q[j][i]);
        }
    }
    q[j] = q[j].split(/\+|\-/g);
    if(q[j].length > symbol[j].length) symbol[j].unshift('+');  
}
  • 2、合并同类项
let x,n = 0;
for(let i = 0; i < q.length; i++){
    for(let j = 0; j < q[i].length; j++){
        if(q[i][j].includes('x')){
            x = cal(x || 0,parseInt(q[i][j]) || (q[i][j][0] == '0' ? 0 : 1),symbol[i][j],i == 0);
        }else{
            n = cal(n,q[i][j],symbol[i][j],i == 1);
        }
    }
}
  • 3、变量系数化简
if(x == 0 && n == 0) return "Infinite solutions";
if(!x) return "No solution";
return "x=" + n / x;

AC代码

/**
 * @param {string} equation
 * @return {string}
 */
 var solveEquation = function(equation) {
    let q = equation.split('=');
    let symbol = [[],[]];
    for(let j = 0; j < 2; j++){
        for(let i = 0; i < q[j].length; i++){
            if(q[j][i] == '+' || q[j][i] == '-'){
                symbol[j].push(q[j][i]);
            }
        }
        q[j] = q[j].split(/\+|\-/g);
        if(q[j].length > symbol[j].length) symbol[j].unshift('+');  
    }
    const cal = (a,b,symbol,flag) => {
        a = parseInt(a) || 0;
        b = parseInt(b) || 0;
        switch(symbol){
            case '+':
                return flag ? a + b : a - b;
            case '-':
                return flag ? a - b : a + b;
        }
    };
    let x,n = 0;
    for(let i = 0; i < q.length; i++){
        for(let j = 0; j < q[i].length; j++){
            if(q[i][j].includes('x')){
                x = cal(x || 0,parseInt(q[i][j]) || (q[i][j][0] == '0' ? 0 : 1),symbol[i][j],i == 0);
            }else{
                n = cal(n,q[i][j],symbol[i][j],i == 1);
            }
        }
    }
    if(x == 0 && n == 0) return "Infinite solutions";
    if(!x) return "No solution";
    return "x=" + n / x;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。


http://lihuaxi.xjx100.cn/news/1894843.html

相关文章

100143. 统计已测试设备 --力扣 --JAVA

题目 给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages &#xff0c;表示 n 个设备的电池百分比。 你的任务是按照顺序测试每个设备 i&#xff0c;执行以下测试操作&#xff1a; 如果 batteryPercentages[i] 大于 0&#xff1a; 增加 已测试设备的计数。将下标在…

【算法每日一练]-图论(保姆级教程篇13 欧拉路径,回路)

目录 判断有向图有欧拉回路 判断有向图有欧拉路径 如果图G中的一个路径包括每个边恰好一次&#xff0c;则该路径称为欧拉路径(Euler path)。 &#xff08;每个点都经过一次就是旅行商问题&#xff09; 预备知识&#xff1a; 有向图有欧拉路径&#xff1a; 等价于&#xff1…

【C语言】C的面向对象

一、BREW接口实现 高通的BREW&#xff08;Binary Runtime Environment for Wireless&#xff09;是一个早期为手机设备开发的应用程序平台&#xff0c;用于开发在CDMA手机上运行的软件。尽管这个平台目前已经不太流行&#xff0c;但是在其使用高峰时期&#xff0c;开发者需要使…

typescript个人学习笔记

https://ts.xcatliu.com/basics/primitive-data-types.html 深受启发 1.剑谱第一页&#xff0c;初始化ts outDir表示把ts编译成js文件&#xff0c;文件编译后存放的位置 2.类型声明 基础数据五种 undefined可以赋值给其他类型引用类型数组对象 //定义数组一 let arr:[][]…

报错“找不到mfc100u.dll,程序无法继续执行”的解决方法,完美解决

在软件操作过程中&#xff0c;部分用户可能遇到"计算机缺失mfc140u.dll导致无法启动程序"的困扰。这种情况常常发生在启动某特定应用&#xff0c;特别是需要VC Redistributable支持的软件时。以下为详尽解决策略&#xff0c;让用户轻松应对这类技术难题&#xff0c;重…

数组笔试题解析(下)

数组面试题解析 字符数组 &#xff08;一&#xff09; 我们上一篇文章学习了一维数组的面试题解析内容和字符数组的部分内容&#xff0c;我们这篇文章讲解一下字符数组和指针剩余面试题的解析内容&#xff0c;那现在&#xff0c;我们开始吧。 我们继续看一组字符数组的面试…

geolife笔记:比较不同轨迹相似度方法

1 问题描述 在geolife 笔记&#xff1a;将所有轨迹放入一个DataFrame-CSDN博客中&#xff0c;已经将所有的轨迹放入一个DataFrame中了&#xff0c;我们现在需要比较&#xff0c;在不同的轨迹距离度量方法下&#xff0c;轨迹相似度的效果。 这里采用论文笔记&#xff1a;Deep R…

【Qt5】ui文件最后会变成头文件

2023年12月14日&#xff0c;周四下午 我也是今天下午偶然间发现这个的 在使用Qt的uic&#xff08;User Interface Compiler&#xff09;工具编译ui文件时&#xff0c;会生成对应的头文件。 在Qt中&#xff0c;ui文件是用于描述用户界面的XML文件&#xff0c;而头文件是用于在…