当前位置:网站首页>640. 求解方程 : 简单模拟题
640. 求解方程 : 简单模拟题
2022-08-10 14:31:00 【宫水三叶的刷题日记】
题目描述
这是 LeetCode 上的 640. 求解方程 ,难度为 中等。
Tag : 「模拟」、「数学」、「双指针」
求解一个给定的方程,将 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"
提示:
equation只有一个'='.equation方程由整数组成,其绝对值在 范围内,不含前导零和变量'x'。
模拟
为了方便,我们令 equation 为 s。
由于运算符只有 + 和 -,因此无须考虑运算优先级,可在遍历过程中进行计算。
使用变量 x 和 num 分别代指当前运算结果中 的系数以及数值部分,从前往后处理 s 的每个字符,根据字符类型进行分情况讨论,假设当前处理到的数值为 :
若 +/-:此时影响的是下一个运算数值的正负,修改对应的op标识;若 数值:此时将完整的运算值进行取出(运算值可能是关于 的描述,可能是纯数值),假设连续段 之间为当前运算值,根据 是否为字符x可知,是要将 的数值累加到变量x,还是将 的数值累加到变量num;若 =:此时代表方程的左边已处理完,将变量x和num进行翻转(含义为将左边的运算结果移项到右边),并继续往后处理。
当整个字符串 s 处理完后,我们得到最终关于 的系数 x,以及数值大小 num。
根据 x 是否为 可知答案:
若 x为 :此时根据num是否为 可知是Infinite solutions(对应num为 ) 还是No solution(对应num不为 )若 x不为 :对x和num进行约分后,返回对应答案。
Java 代码:
class Solution {
public String solveEquation(String s) {
int x = 0, num = 0, n = s.length();
char[] cs = s.toCharArray();
for (int i = 0, op = 1; i < n; ) {
if (cs[i] == '+') {
op = 1; i++;
} else if (cs[i] == '-') {
op = -1; i++;
} else if (cs[i] == '=') {
x *= -1; num *= -1; op = 1; i++;
} else {
int j = i;
while (j < n && cs[j] != '+' && cs[j] != '-' && cs[j] != '=') j++;
if (cs[j - 1] == 'x') x += (i < j - 1 ? Integer.parseInt(s.substring(i, j - 1)) : 1) * op;
else num += Integer.parseInt(s.substring(i, j)) * op;
i = j;
}
}
if (x == 0) return num == 0 ? "Infinite solutions" : "No solution";
else return "x=" + (num / -x);
}
}
TypeScript 代码:
function solveEquation(s: string): string {
let x = 0, num = 0, n = s.length
for (let i = 0, op = 1; i < n; ) {
if (s[i] == '+') {
op = 1; i++;
} else if (s[i] == '-') {
op = -1; i++
} else if (s[i] == '=') {
x *= -1; num *= -1; op = 1; i++;
} else {
let j = i
while (j < n && s[j] != '+' && s[j] != '-' && s[j] != '=') j++
if (s[j - 1] == 'x') x += (i < j - 1 ? Number(s.substring(i, j - 1)) : 1) * op
else num += Number(s.substring(i, j)) * op
i = j
}
}
if (x == 0) return num == 0 ? "Infinite solutions" : "No solution"
else return "x=" + (num / -x)
};
时间复杂度: 空间复杂度:使用 charAt替换toCharArray。复杂度为
最后
这是我们「刷穿 LeetCode」系列文章的第 No.640 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。
在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地
边栏推荐
- [Gazebo Introductory Tutorial] Lecture 3 Static/Dynamic Programming Modeling of SDF Files
- d为何用模板参数
- 自定义picker滚动选择器样式
- 什么?你还不会JVM调优?
- 【有限元分析】异型密封圈计算泄漏量与参数化优化过程(带分析源文件)
- 作业
- 这一次,话筒给你:向自由软件之父斯托曼 提问啦!
- Error: Rule can only have one resource source (provided resource and test + include + exclude)
- AWS Security Fundamentals
- 兆骑科创创业赛事活动发布平台,创业赛事,项目路演
猜你喜欢

使用Uiautomator2进行APP自动化测试

借数据智能,亚马逊云科技助力企业打造品牌内生增长力

Open source SPL wipes out tens of thousands of database intermediate tables

发送post请求前台无法获取数据

MySQL interview questions

符合信创要求的堡垒机有哪些?支持哪些系统?

使用mysq语句操作数据库

易观分析联合中小银行联盟发布海南数字经济指数,敬请期待!
Existing in the rain of PFAS chemical poses a threat to the safety of drinking water

机器学习总结(一)
随机推荐
How does vue clear the tab switching cache problem?
作业
【MinIO】Using tools
Alibaba的秒杀系统—千亿级并发设计手册上线了
NAACL 2022 | 简单且高效!随机中间层映射指导的知识蒸馏方法
PEST 分析法
tensorflow安装踩坑总结
2012年下半年 系统架构设计师 下午试卷 II
正则表达式(包含各种括号,echo,正则三剑客以及各种正则工具)
TestLink导出用例转换工具
《论文阅读》PLATO: Pre-trained Dialogue Generation Model with Discrete Latent Variable
Classifying irises using decision trees
2011年下半年 系统架构设计师 下午试卷 II
Lack of comparators, op amps come to the rescue!(Op amp is recorded as a comparator circuit)
Appium进行APP自动化测试
"Thesis Reading" PLATO: Pre-trained Dialogue Generation Model with Discrete Latent Variable
[Gazebo Introductory Tutorial] Lecture 3 Static/Dynamic Programming Modeling of SDF Files
BCG库简介
【Gazebo入门教程】第三讲 SDF文件的静/动态编程建模
王学岗————直播推流(软便)03x264集成与camera推流