640. 求解方程(Python)

2020-11-20  本文已影响0人  玖月晴

题目

难度:★★★☆☆
类型:数学
方法:格式化字符串

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

求解一个给定的方程,将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解决方案,请移步力扣中等题解析

上一篇 下一篇

猜你喜欢

热点阅读