题目:

求解一个给定的方程,将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. electron程序运行在某些 windows 上白屏

    现象: 打包后的 electron 程序 运行在某些 windows 上白屏 项目情况: vue3.0  项目使用 vue-cli 创建 使用 vue add electron-builder 添加打 ...

  2. HISI3520DV300 折腾记录(一)之 《Uboot-Start.S分析 以及 相关启动流程分析》

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. 如何让AR物体更真实?

    在增强现实中,除了虚拟物体本身的模型材质等因素,影响物体真实性的主要是光照.反射.阴影.接下来3DCAT实时渲染云平台将带您从这三个方面探索如何让AR物体更真实! AR光估测 要让一个虚拟物体很好的融 ...

  4. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第5章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 出处:207页 原文: 在我们的应用程序中,是不太可能出现LargeHeapHandleTable的问题的.一般来说,可能出现问题会是在需要(动态 ...

  5. FPGA中的时钟域问题

    FPGA中的时钟域问题 一.时钟域的定义 所谓时钟域,就是同一个时钟驱动的区域.这里的驱动,是指时钟刷新D触发器的事件,体现在verilog中就是always的边沿触发信号.单一时钟域是FPGA的基本 ...

  6. Spring Cloud相关组件说明

    1.Spring Cloud版本 现有Spring Cloud有两代实现,分为Spring Cloud Netflix和Spring Cloud Alibaba,由于SpringCloud Netfl ...

  7. KingbaseES角色和权限介绍

    KingbaseES 使用角色的概念管理数据库访问权限.为了方便权限管理,用户可以建立多个角色,对角色进行授权和权限回收,并把角色授予其他用户. 数据库初始化时,会创建一个超级用户的角色:system ...

  8. #动态规划,组合计数,树状数组,前缀和#F 简单计数题&K 最简单的题

    先膜两位出题人 F 简单计数题 题目 有\(n\)个活动,预约期有\(k\)天,第\(j\)天YC可以获得\(a_j(1\leq a_j\leq n)\)张预约券, 他会在\(n\)个活动中等概率选择 ...

  9. OpenHarmony开发之MQTT讲解

      相信MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用.那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmony(以下简 ...

  10. C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

    C 语言中的用户输入 您已经学习了 printf() 函数用于在 C 语言中输出值. 要获取用户输入,可以使用 scanf() 函数: // 声明一个整数变量,用于存储我们从用户那里获得的数字 int ...