题目内容

求解一个给定的方程,将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’

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/solve-the-equation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

首先,我们知道这个是一个一元一次方程,所以他的求解是很简单的,换句话说,如果我们的输入是告诉你左边x的系数,右边的常数,形如ax=b的形式,我们自然可以轻松给出答案。而我们这个题目的目的,就是把他的输入调整成这个格式。

首先,我们以=为界,将字符串左右分开,左右分开统计,并不影响复杂度,我们依旧是一个字符过一遍,然后,遍历左右的字符串,用string类型变量记录每一个遍历的字符,以±符号作为处理这个string变量的标志,因为可能开头就有-号,所以要提前注明这个string的长度不能为0,然后判定string的最后一位是不是x,如果是,就把掐头去尾,去掉符号和X,中间部分转数字,作为系数统计,如果不是,就只去掉前面的符号,做常数统计,左右两边各有一个系数,一个常数。最后的情况为ax+b=cx+d。

最后的操作虽然简单,但是也是我忽略了小细节的地方,我们这时候把x放左边,常数放右边。然后要先判断有没有解,是否会有无限解,这里的判定条件,我错了两次,主要是没有理清楚,最后才整理出来,先看系数,再看常数的判定逻辑。

包括最后的输出结果部分,我当时是没有用这个to_string的函数,而是直接’0’+anss了,但是这个我们现在来看显然是不对的,一来结果可能为负,二来结果大概率大于10,这样就很麻烦,我就直接改用to_string了。

代码

class Solution {public:string solveEquation(string equation) {int biao=equation.find('=');string zuo=equation.substr(0,biao);string you=equation.substr(biao+1,equation.length());int zuoxi=0;int zuoshu=0;int youxi=0;int youshu=0;vector<string> os;vector<string> os2;string duan="";for(int i=0;i<zuo.length();i++){if(zuo[i]=='+'||zuo[i]=='-'){if(duan.length()==0){duan+=zuo[i];continue;}else{os.push_back(duan);duan="";}}duan+=zuo[i];}os.push_back(duan);duan="";for(int i=0;i<you.length();i++){if(you[i]=='+'||you[i]=='-'){if(duan.length()==0){duan+=you[i];continue;}else{os2.push_back(duan);duan="";}}duan+=you[i];}os2.push_back(duan);duan="";for(int i=0;i<os.size();i++){if(os[i][os[i].length()-1]=='x'){if(os[i][0]=='+'||os[i][0]=='-'){if(os[i].length()==2){int num=os[i][0]=='+'?1:-1;zuoxi+=num;continue;}string xishu=os[i].substr(1,os[i].length()-2);int num=os[i][0]=='+'?stoi(xishu):-stoi(xishu);zuoxi+=num;}else{if(os[i].length()==1){zuoxi+=1;continue;}string xishu=os[i].substr(0,os[i].length()-1);                   int num=stoi(xishu);zuoxi+=num;}}else{if(os[i][0]=='+'||os[i][0]=='-'){string xishu=os[i].substr(1,os[i].length()-1);int num=os[i][0]=='+'?stoi(xishu):-stoi(xishu);zuoshu+=num;}else{string xishu=os[i];int num=stoi(xishu);zuoshu+=num;}}}for(int i=0;i<os2.size();i++){if(os2[i][os2[i].length()-1]=='x'){if(os2[i][0]=='+'||os2[i][0]=='-'){if(os2[i].length()==2){int num=os2[i][0]=='+'?1:-1;youxi+=num;continue;}string xishu=os2[i].substr(1,os2[i].length()-2);int num=os2[i][0]=='+'?stoi(xishu):-stoi(xishu);youxi+=num;}else{if(os2[i].length()==1){youxi+=1;continue;}string xishu=os2[i].substr(0,os2[i].length()-1);                   int num=stoi(xishu);youxi+=num;}}else{if(os2[i][0]=='+'||os2[i][0]=='-'){string xishu=os2[i].substr(1,os2[i].length()-1);int num=os2[i][0]=='+'?stoi(xishu):-stoi(xishu);youshu+=num;}else{string xishu=os2[i];int num=stoi(xishu);youshu+=num;}}}int x_xi=zuoxi-youxi;int shu=youshu-zuoshu;string ans="x=";if(x_xi==0){if(shu!=0){return "No solution";}return "Infinite solutions";}else{int anss=shu/x_xi;// if(anss<0){//     ans+='-';//     anss=-anss;// }string insert=to_string(anss);ans+=insert;}return ans;}
};

C++求解一元一次方程——LeetCode 640相关推荐

  1. 计算器求解一元一次方程

    链接:https://ac.nowcoder.com/acm/contest/19306/1043 来源:牛客网 题目描述 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托 ...

  2. python求解一元一次方程

    待求解方程: 61.08x/(61.08x+18.02*(1-x-0.15*x)) = 0.3 from sympy import *x = symbols('x') z = solve(61.08* ...

  3. 求解一元一次方程C语言,问一道算法题目(解一元一次方程的问题)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void fun(char *a,int left ,int right , int *b ,int *c) // i ...

  4. C语言笔记 | 一元一次方程

    文章目录 0x00 前言 0x01 问题分析 0x02 代码设计 0x03 完整代码 0x04 运行效果 0x05 参考文献 0x06 总结 0x00 前言 一元一次方程指只含有一个未知数.未知数的最 ...

  5. 一元一次方程的解析解(基本字符串处理)

    找工作投简历的时候遇到这样一道题,"如何通过基础的解析字符串的方式去求解一元一次方程,而不通过工具包或者内置函数等计算?",即输入任意一个一元一次函数(如:"((2x+1 ...

  6. java 一元一次方程求解_七年级一元一次方程概念和解法,掌握这些就够了!

    对于七年级学生来说,一元一次方程是必不可少的一部分内容.下面总结了一元一次方程的概念和解法,学生对于这一部分内容掌握这些题型就够了. 考察一元一次方程概念题有两种题型,这两种题型也是后面我们要学的一元 ...

  7. java 四元一次方程_JAVA编写求解一元多次方程的程序,要求如下:

    展开全部 import java.io.*; import java.util.*;public class SolveEquation { void print()throws IOExceptio ...

  8. 通过C/C++,实现一元一次方程求解

    通过C/C++,实现一元一次方程求解: 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 string str, str_l, s ...

  9. 一元三次方程求解matlab_七年级下学期一元一次方程章节2020年高频典型题集(举一反三)...

    [考点1 一元一次方程的定义] [方法点拨]一元一次方程:只含有一个未知数,并且未知数的次数是1,并且含未知数项的系数不是零的整式方程是一元一次方程. [点睛]本题主要考查了一元一次方程的一般形式,只 ...

最新文章

  1. 北大研究人员这次发现了AI「躺平」原因,都是数据集的错!
  2. 不用回调方法捕获数据包
  3. android pc模式 刘祚虎,刘作虎:一加三段式按键安卓手机唯一 5年付出亿级成本...
  4. ShopEx文章页增加上一篇下一篇功能
  5. 2pc 3pc_在1990年代如何宣传PC
  6. python web应用_如何使用Python将通知发送到Web应用
  7. resset-rem.css
  8. centos5.5 挂载NTFS优盘
  9. Linux如何检查目录inode占用,linux – 如何确定哪个文件/ inode占用给定扇区
  10. Java菜鸟学习笔记--面向对象篇(十八):对象转型多态
  11. NAT穿透-P2P-UDP打洞
  12. 0018计算机应用基础国考考试大纲,《计算机应用基础》考试大纲
  13. 高清成主流 十大最受用户关注摄像头
  14. 无人机倾斜摄影测量土方计算
  15. office2007卸载不干净 无法安装office64位的版本
  16. 如何找到微信的服务器地址
  17. openGL-设计交互平面图形(旋转、平移、缩放)
  18. 【Scrum模式语言3】完成的定义
  19. SAP的成本中心和利润中心的关系
  20. php连接mysql测试脚本,php MySQL连接测试

热门文章

  1. 小米手机关闭广告后,整个世界清静了
  2. 三星android se干啥得,都叫“SE”,Android 和苹果的差别为什么这么大?
  3. 运维(14) docker-compose部署Elasticsearch并设置账号密码
  4. Who wants to play League of Legends with me? 谁想和我玩英雄联盟呀?
  5. Linux上网连接路由器的方法
  6. minecraft服务器地皮信息,服务器领地地皮指令大全 183独家汇总
  7. xxx.whl is not a supported wheel on this platfo解决办法
  8. Ubuntu 14.04 卸载搜狗输入法后无法进入图形界面问题解决办法
  9. 《SOA达人迷》—术 语 表
  10. 单片机死机常见原因分析