木又连续日更第83天(83/100)
木又的第209篇leetcode解题报告
数学
类型第25篇解题报告
leetcode第640题:求解方程
https://leetcode-cn.com/problems/solve-the-equation/
【题目】
求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含'+',' - '操作,变量 x 和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x 是一个整数。
示例 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等拿到各个系数。
注意的是:
1)x前不一定有系数,那么默认系数为1
2)=前不一定是数字,也有可能是x
3)等号后的系数加入到总数中,需要乘以-1
【代码】
python版本
class Solution(object):
def solveEquation(self, equation):
"""
:type equation: str
:rtype: str
"""
a = 0
b = 0
start = 0
flag = 1
for i in range(len(equation)):
if equation[i] == 'x':
# 'x'要分为单独的'x'和带系数的'ax'分别处理
if start == i or (i - start == 1 and equation[start] == '+'):
a += flag
elif i - start == 1 and equation[start] == '-':
a -= flag
else:
a += flag * int(equation[start:i])
start = i + 1
elif equation[i] == '=':
# 等号前的数字也要单独处理
if i > start:
b += flag * int(equation[start:i])
flag = -1
start = i + 1
elif equation[i] == '+' or equation[i] == '-':
# print(equation[start:i])
# 'x+2'在x后面也有个+,''不能被转换为int
if i == start:
continue
b += flag * int(equation[start:i])
start = i
# 结束要处理
if start < len(equation):
b += flag * int(equation[start:])
if a == 0 and b == 0:
return "Infinite solutions"
if a == 0 and b != 0:
return "No solution"
return "x=" + str(-b // a)