640. 求解方程(中)

题目

  • 求解一个给定的方程,将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"

示例 2:

输入: equation = "2x=x"
输出: "x=0"

题解:模拟

class Solution:
    def solveEquation(self, equation: str) -> str:
        # 化为 kx = b 的形式
        left, k, b, neg = 1, 0, 0, 1 #left控制方程左右、未知数的系数、常数项和符号
        cur = ""  # 当前数字字符串
        for e in equation:# 遍历方程字符串
            if e == 'x':# 处理未知数系数
                num = int(cur) if cur else 1#将当前数字字符串转换为整数,如果为空则默认为1
                k += left * neg * num  # 更新未知数系数
                cur = ""  # 重置当前数字字符串
            elif e in "+-=":
                if cur:# 处理常数项和符号
                    num = int(cur)
                    b += -left * neg * num  #b的值放右边,处理等号左边时left取-
                if e == '=':
                    left = -1  #b的值放右边,处理等号右边时left取--为+
                    neg = 1
                elif e == '-':
                    neg = -1  #-号时neg设为-1
                else:
                    neg = 1   #+号时neg设为1
                cur = ""
            else:   #不是x和+-=,是数字时候放进cur
                cur += e
        if cur:  # 处理剩余的数字字符串
            b += -left * neg * int(cur) #将剩余的数字字符串转换为整数并更新常数项
        if k == 0:
            return "Infinite solutions" if b == 0 else "No solution"
        return f"x={b // k}"# 有唯一解
posted @ 2024-04-10 11:12  Frommoon  阅读(4)  评论(0编辑  收藏  举报