问题描述:

示例 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. 纯css实现网络图标

    <html> <head> <title>css图标</title> <meta charset="utf-8"> &l ...

  2. 执行sh脚本文件下载Github上的代码(雷霄骅的ffmpeg示例代码)

       今天想重新学习下ffmpeg,于是又来到了雷晓骅的博客,先下载了他的所有代码,这里记录一下在Windows上使用sh脚本下载GitHub上代码的过程. CygWin(最后并没有用到)    可以 ...

  3. redis 的一主二从三哨兵模式

    概述 在部署redis 的时候,如果redis宕机,缓存将不可用,redis提供了哨兵模式保证redis实现高可用. 即一台主机两台从机,三台哨兵主机,如果主实例宕机,哨兵将将一台从机升级为主机.实现 ...

  4. 第15章 上下文管理器和else块

    #<流流畅的Python>第15章 上下文管理器和else块 #15.1 先做这个,再做那个:if语句之外的else块 #else子句不仅能在if语句中使用,还能在for.while和tr ...

  5. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  6. [转载]使用PHP_CodeSniffer规范php代码

    为什么使用PHP_CodeSniffer 一个开发团队统一的编码风格,有助于他人对代码的理解和维护,对于大项目来说尤其重要. PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查嗅探 ...

  7. SQL优化实战之加索引

    有朋友和我说他的虚机里面的mysql无法跑sql,但是在本地环境是这个sql是可以跑出来的.碰到这个问题第一反应是:死锁. 于是让他查询数据库的几个状态: 发现连即时锁都非常少,不是锁的问题. 进一步 ...

  8. shell实现linux回收站的功能

    shell实现linux回收站的功能 下载: https://gitee.com/LoongWang/shellrecycling/repository/archive/master.zip 代码: ...

  9. 老树新芽,在ES6下使用Express

    要让Express在ES6下跑起来就不得不用转码器Babel了.首先新建一个在某目录下新建一个项目.然后跳转到这个目录下开始下面的操作. 简单走起 安装babel-cli $ npm install ...

  10. Write Markdown Syntax Online Document with Sphinx and Pandoc

    There is no doubt that we have to write doc while we are developing software. But How do you write d ...