问题描述:

示例 1:

输入: "x+5-3+x=6+x-2"
输出: "x=2"
示例 2: 输入: "x=x"
输出: "Infinite solutions"
示例 3: 输入: "2x=x"
输出: "x=0"
示例 4: 输入: "2x+3x-6x=x+2"
输出: "x=-1"
示例 5: 输入: "x=x+2"
输出: "No solution"

  

思路:考的是字符串的解析

跟平时学的解方程的一样,根据等号将方程分为两个部分

将两端的方程的X的系数和,和常数和计算出来,然后两边的X的系数和相减,常数和相减,相除,分清楚情况就行

解析字符串注意边界

public class Main {

    public static void main(String[] args) {
System.out.println(solveEquation("x+5-3+x=6+x-2"));
}
public static String solveEquation(String equation) {
//等号为界,分为两边
String[] split = equation.split("=");
int[] left = findPreNumSum(split[0]);
int[] right = findPreNumSum(split[1]);
if (left[0]==right[0]&&left[1]==right[1])
return "Infinite solutions";
else if (left[0]==right[0]&&left[1]!=right[1]){
return "No solution";
}else {
return "x="+(right[1]-left[1])/(left[0]-right[0]);
}
}
public static int[] findPreNumSum(String s){
int x_sum = 0;
int integerSum = 0;
int length = s.length();
for (int i = 0;i < length;i++){
char it = s.charAt(i);
char pre = i>0?s.charAt(i-1):'n';
char next = i>length-2?'n':s.charAt(i+1);
if(it=='+'||it=='-')
continue;
//此分支计算等号某一侧的x的系数和
if (it == 'x'||it=='X'){
if (pre=='n'){
//x位于第一位
x_sum = x_sum + 1;
}else {
int count = 1;
int sum = 0;
int j;
for (j = i-1;;){
//从当前遍历位(即x)的前一位往前推
if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){
if (i-j==1&&(s.charAt(j)=='+'||s.charAt(j)=='-')){
//非第一位的x系数为1/-1的情况
x_sum = x_sum + (s.charAt(j)=='+'?1:(-1));
System.out.println(x_sum);
}
//x系数累乘的倍数归为1
count = 1;
break;
}
//算系数,不分加减
sum = sum + (s.charAt(j)-'0')*count;
count = count * 10;
j--; }
//根据前面的符号来计算已遍历的x的系数和
x_sum = x_sum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum;
count = 1;
sum = 0;
}
}
//此分支计算等号某一侧的常数和
else {
//若此时遍历不是邻近x的数字,跳过
if (('0'<=next&&next<='9')||next=='x')
continue;
int count = 1;
int sum = 0;
int j;
//从当前遍历位往前推,即算上本身
for (j = i;;){
if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){
count = 1;
break;
}
//同上,计算系数,不分符号
sum = sum + (s.charAt(j)-'0')*count;
count = count * 10;
j--;
}
//带上符号算已遍历的常数的和
integerSum = integerSum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum;
count = 1;
sum = 0;
}
}
System.out.println(x_sum+"-"+integerSum);
//返回此侧的x的系数和和常数和
return new int[]{x_sum,integerSum};
} }

  

太菜了,各位有更牛逼的解决办法告诉一下我呀

[LeetCode]640解方程式的更多相关文章

  1. 由Leetcode详解算法 之 动态规划(DP)

    因为最近一段时间接触了一些Leetcode上的题目,发现许多题目的解题思路相似,从中其实可以了解某类算法的一些应用场景. 这个随笔系列就是我尝试的分析总结,希望也能给大家一些启发. 动态规划的基本概念 ...

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

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

  3. Java实现 LeetCode 37 解数独

    37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...

  4. leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独

    leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...

  5. Leetcode 详解(ReverseWords)

    Leetcode里面关于字符串的一些问题,描述如下: Given an input string, reverse the string word by word. For example,Given ...

  6. LeetCode 全解(bug free 训练)

    1.Two Sum Given an array of integers, return indices of the two numbers such that they add up to a s ...

  7. Leetcode 640.求解方程

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

  8. FZU 2125 简单的等式 【数学/枚举解方程式】

    现在有一个等式如下:x^2+s(x,m)x-n=0.其中s(x,m)表示把x写成m进制时,每个位数相加的和.现在,在给定n,m的情况下,求出满足等式的最小的正整数x.如果不存在,请输出-1. Inpu ...

  9. 【LeetCode】解数独

    做题之前先复习下[STL中的Tuple容器] 我们知道,在Python中,大家都知道tuple这个概念,是一个只读的元素容器,容器内的元素数据类型可以不同,而在CPP中大部分的容器只能储存相同数据类型 ...

随机推荐

  1. pat -1004(树的遍历)

    题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路: (1)用vector记录每 ...

  2. 获取POM.XML依赖的JAR包

    pom.xml 文件的依赖在本地仓库中,有些情况我需要根据pom.xml 抓取所有依赖的JAR包. 这个可以通过 ant 完成这个包的抓取. <target name="maven-j ...

  3. 关于WEB前端,你必须了解的发展方向

    一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在我看来,做WEB前端技术能够找到的职业方向有以下几种: (1)资深WEB前端工程师 这个方向算是一个WEB前端最基本的选择了,在国 ...

  4. js中如何将数据获得2位小数以及对数据进行千分位划分

    js中toFixed(n) 方法可把 数字四舍五入为指定小数位数n的数字,注意:这个方法只能对数据类型为Number的数据起作用,包括float,int等.例如:   123.12345.toFixe ...

  5. Spring 整合 RocketMQ

    1. 引入jar包 <!-- RocketMQ --> <dependency> <groupId>com.alibaba.rocketmq</groupId ...

  6. Spring的下载与安装

    Spring是一个独立的框架,不依赖于任何Web服务器或容器.它既可在独立的JavaSE项目中使用,也可以在Java Web项目中使用. 下载和安装Spring框架可按如下步骤进行: 1.登录http ...

  7. Ng第一课:引言(Introduction)

    Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能. 它是人工智能的核心,是使计算机具有智能的根本 ...

  8. day35(servlet 3.0)

    servlet3.0的问题 Servlet3.0与Servlet2.5提供了三个新特性: * 注解开发   :方便 * 文件上传   :有些API不是特别全. * 异步请求   :多线程的实现 注解开 ...

  9. web-day16

    第16章WEB16-Listener&Filter篇 今日任务 使用过滤器完成自动登录的案例 使用过滤器统一网站的字符集编码 教学导航 教学目标 了解常见的监听器 理解过滤器的生命周期 能够使 ...

  10. linux 查看、关闭 ssh pts/n登录的用户

    1.查看登录用户: [root@TiaoBan- bin]# w :: up days, :, users, load average: 1.90, 1.75, 1.84 USER TTY FROM ...