题目:

求解一个给定的方程,将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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.首先将方程式以 “=” 作为分割符进行左右分割,并将 ‘-’ 替换成 ‘+-’;

2.设置两个变量统计x的系数 xnum和常数 num;

3.再遍历分割出的左边的字符串,以 '+' 作为分割符,分割出含有x的字符串和常数字符串;

  • 如果遍历的字符串为"x",则xnum++;
  • 如果遍历的字符串为"-x",,则xnum--;
  • 如果遍历的字符串为含有其他的常数项的x,,则xnum+常数项(常数项可为正可为负);
  • 否则,就是遍历的常数项,想象需要将常数项移到等号右边,则常数num - 当前常数。

4.再遍历分割出的右边的字符串,以 '+' 作为分割符,分割出含有x的字符串和常数字符串,这与第三步类似;

  • 如果遍历的字符串为"x",则xnum--(想象需要将含x的项移到等号左边);
  • 如果遍历的字符串为"-x",,则xnum++(想象需要将含x的项移到等号左边);
  • 如果遍历的字符串为含有其他的常数项的x,,则xnum-常数项(常数项可为正可为负);
  • 否则,就是遍历的常数项,等号右边的常数项不需要移动,则常数num +当前常数。

5.返回结果

  • 如果xnum == num == 0,则有无穷解;
  • 如果就xnum==0,则无解;
  • 如果不满足以上两种情况,则x = num / xnum 。

代码:

 1 class Solution {
2 public String solveEquation(String equation) {
3 //将负号换成正负号,并以等号为分割符进行左右分割
4 String[] s1 = equation.replace("-","+-").split("=");
5 //设置两个变量统计x的系数和常数
6 int xnum = 0,num = 0;
7 //遍历等号左边的数
8 for (String s: s1[0].split("\\+")){
9 if (s.length() == 0) continue;
10 if (s.contains("x")){
11 if (s.equals("x"))
12 xnum++;
13 else if (s.equals("-x"))
14 xnum--;
15 else
16 //x前面有>1的系数
17 xnum += Integer.parseInt(s.replace("x",""));
18 }
19 else{
20 num -= Integer.parseInt(s);
21 }
22 }
23 //遍历等号右边的数
24 for (String s: s1[1].split("\\+")){
25 if (s.length() == 0) continue;
26 if (s.contains("x")){
27 if (s.equals("x"))
28 xnum--;
29 else if (s.equals("-x"))
30 xnum++;
31 else
32 //x前面有>1的系数
33 xnum -= Integer.parseInt(s.replace("x",""));
34 }
35 else{
36 num += Integer.parseInt(s);
37 }
38 }
39 if (xnum == 0 && num == 0)
40 return "Infinite solutions";
41 if (xnum == 0)
42 return "No solution";
43 return "x=" + (num/xnum);
44
45 }
46 }

力扣640(java)-求解方程(中等)的更多相关文章

  1. Java实现 LeetCode 640 求解方程(计算器的加减法计算)

    640. 求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回" ...

  2. Leetcode 640.求解方程

    求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回"No so ...

  3. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  4. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  5. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

  6. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  7. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  8. 【力扣leetcode】-787. K站中转内最便宜的航班

    题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...

  9. 力扣(leetcode)题库0001-python3

    试一下leetcode的题库,不知道对于我这种小白要多长时,但是目标已经种下,去做就是了.You can do anything you set your mind to. 题目:题库链接 中:给定一 ...

  10. C++ 二分法求解方程的解

    二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20 ...

随机推荐

  1. 基于Apollo3 Blue MCU芯片的可穿戴产品解决方案开发之健康手环源码解析

    一 前记 健康手环是Apollo3 Blue的一个主打业务,也是该芯片最适合做的产品,在健康穿戴设备领域,该芯片有着对场景的透彻理解和技术的深厚积累. 二 源码分析 协议栈初始化: exactle_s ...

  2. Github+picGo搭建图床(搭配Typora)

    使用Github+picGo搭建图床,保姆级教程来了 - 转载自知乎 (zhihu.com) 1. 注册一个Github账号 首先你需要一个github账号,如果没有的话,先注册. github官网地 ...

  3. Java基础知识篇02——Java基本语法

    一.数据类型 定义: 就是用了保存数据的一个类型,一种数据类型,只能保存该类型数据值 作用: 只有了解数据类型,才能选择合适的类型存放数据,才能更好的利用计算机硬件资源(内存和硬盘等). 不同的数据类 ...

  4. Java反序列化学习

    前言 早知前路多艰辛,仙尊悔而我不悔.Java反序列化,免费一位,开始品鉴,学了这么久web,还没深入研究Java安全,人生一大罪过.诸君,请看. 序列化与反序列化 简单demo: import ja ...

  5. JavaScript知识总结 闭包篇

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 对闭包的理解 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问 ...

  6. RL 基础 | Policy Gradient 的推导

    去听了 hzxu 老师的 DRL 课,感觉终于听懂了,记录一下- 目录 0 我们想做什么 1 三个数学 trick 2 对单个 transition 的 policy gradient 3 对整个 t ...

  7. 第145篇:js设计模式注册模式及相应实践

    好家伙,   0.索引  在阿里的低开项目中,使用这种形式去注册组件,我不禁好奇,这到底是个什么玩意 1.概念 在 JavaScript 中,注册模式(Registry Pattern)是一种设计模式 ...

  8. WC-Write Combining 合并写技术

    WC-Write Combining 合并写技术 为了提高写效率: CPU在写入L1时,同时用WC写入L2 实验代码: public class WriteCombining { private st ...

  9. KingbaseES 数据表复制语句的功能差异

    Kingbase 数据表复制操作 数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制.在KingbaseES数据库可以采用select into,create table as sel ...

  10. k8s CustomResourceDefinition invalid 错误

    安装 CRD 出现这个错误,多数是版本问题,缺少openAPIV3Schema段定义. The CustomResourceDefinition "crontabs.stable.examp ...