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}"# 有唯一解