题目
难度:★★★☆☆
类型:数学
方法:格式化字符串
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
求解一个给定的方程,将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”替换为“+1x”,增补符号,将“-”替换为“-+”,以及增补首项的正号等。
第二,分类的表达,用正负号代表移项后的结果,将一次项和常数项进行归并。
第三,结果的分类处理,如果计算得到一次项系数和常数项为零,说明所有项全部约去,无限多解,如果一次项系数为零而常数项系数不为零,等号不成立,无解。
class Solution(object):
def solveEquation(self, equation):
e = equation.replace('-x', '-1x').replace("-", "+-") # 一些初步的替换
x_coefficient, constant = 0, 0 # 初始化一次项系数和常数项
for i, expression in enumerate(e.split('=')): # 拆分左右表达式
if not expression.startswith('+'): # 格式化
expression = '+'+expression
expression = expression.replace('+x', '+1x')
for t in expression.split('+'): # 拆分各项
if len(t) > 0: # 遇到有效项
if 'x' in t: # 该项是一次项
x_coefficient += int(t.strip('x')) if i == 0 else -int(t.strip('x'))
else: # 该项是常数项
constant += int(t) if i == 0 else -int(t)
if x_coefficient != 0:
return 'x={}'.format(str(-constant//x_coefficient))
if constant == 0:
return "Infinite solutions"
return "No solution"
如有疑问或建议,欢迎评论区留言~
有关更多力扣中等题的python解决方案,请移步力扣中等题解析
网友评论