[LeetCode]640解方程式
问题描述:
示例 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解方程式的更多相关文章
- 由Leetcode详解算法 之 动态规划(DP)
因为最近一段时间接触了一些Leetcode上的题目,发现许多题目的解题思路相似,从中其实可以了解某类算法的一些应用场景. 这个随笔系列就是我尝试的分析总结,希望也能给大家一些启发. 动态规划的基本概念 ...
- Java实现 LeetCode 640 求解方程(计算器的加减法计算)
640. 求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回" ...
- Java实现 LeetCode 37 解数独
37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...
- leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独
leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...
- Leetcode 详解(ReverseWords)
Leetcode里面关于字符串的一些问题,描述如下: Given an input string, reverse the string word by word. For example,Given ...
- 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 ...
- Leetcode 640.求解方程
求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回"No so ...
- FZU 2125 简单的等式 【数学/枚举解方程式】
现在有一个等式如下:x^2+s(x,m)x-n=0.其中s(x,m)表示把x写成m进制时,每个位数相加的和.现在,在给定n,m的情况下,求出满足等式的最小的正整数x.如果不存在,请输出-1. Inpu ...
- 【LeetCode】解数独
做题之前先复习下[STL中的Tuple容器] 我们知道,在Python中,大家都知道tuple这个概念,是一个只读的元素容器,容器内的元素数据类型可以不同,而在CPP中大部分的容器只能储存相同数据类型 ...
随机推荐
- pat -1004(树的遍历)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路: (1)用vector记录每 ...
- 获取POM.XML依赖的JAR包
pom.xml 文件的依赖在本地仓库中,有些情况我需要根据pom.xml 抓取所有依赖的JAR包. 这个可以通过 ant 完成这个包的抓取. <target name="maven-j ...
- 关于WEB前端,你必须了解的发展方向
一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在我看来,做WEB前端技术能够找到的职业方向有以下几种: (1)资深WEB前端工程师 这个方向算是一个WEB前端最基本的选择了,在国 ...
- js中如何将数据获得2位小数以及对数据进行千分位划分
js中toFixed(n) 方法可把 数字四舍五入为指定小数位数n的数字,注意:这个方法只能对数据类型为Number的数据起作用,包括float,int等.例如: 123.12345.toFixe ...
- Spring 整合 RocketMQ
1. 引入jar包 <!-- RocketMQ --> <dependency> <groupId>com.alibaba.rocketmq</groupId ...
- Spring的下载与安装
Spring是一个独立的框架,不依赖于任何Web服务器或容器.它既可在独立的JavaSE项目中使用,也可以在Java Web项目中使用. 下载和安装Spring框架可按如下步骤进行: 1.登录http ...
- Ng第一课:引言(Introduction)
Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能. 它是人工智能的核心,是使计算机具有智能的根本 ...
- day35(servlet 3.0)
servlet3.0的问题 Servlet3.0与Servlet2.5提供了三个新特性: * 注解开发 :方便 * 文件上传 :有些API不是特别全. * 异步请求 :多线程的实现 注解开 ...
- web-day16
第16章WEB16-Listener&Filter篇 今日任务 使用过滤器完成自动登录的案例 使用过滤器统一网站的字符集编码 教学导航 教学目标 了解常见的监听器 理解过滤器的生命周期 能够使 ...
- linux 查看、关闭 ssh pts/n登录的用户
1.查看登录用户: [root@TiaoBan- bin]# w :: up days, :, users, load average: 1.90, 1.75, 1.84 USER TTY FROM ...