640. 求解方程
JalanJiang opened this issue · 2 comments
JalanJiang commented
- 原题链接:640. 求解方程
- 题解链接:http://jalan.space/leetcode-notebook/#/algorithm/math/?id=_640-%e6%b1%82%e8%a7%a3%e6%96%b9%e7%a8%8b
- 输出题解
- 时间复杂度
- 是否最优解
JalanJiang commented
啰里八嗦法
class Solution:
def solveEquation(self, equation: str) -> str:
formula = equation.split("=")
x_count = 0
num = 0
# left
pre_symbol = "+"
number = 0
has_number = False
for c in formula[0]:
if c != "+" and c != "-":
if c == "x":
if not has_number:
add_x = 1
else:
if number == 0:
add_x = 0
else:
add_x = number
if pre_symbol == "+":
x_count += add_x
else:
x_count -= add_x
number = 0
has_number = False
else:
number = number * 10 + int(c)
has_number = True
else:
# print(str(num) + pre_symbol + str(number))
num = eval(str(num) + pre_symbol + str(number))
number = 0
has_number = False
pre_symbol = c
num = eval(str(num) + pre_symbol + str(number))
# right
pre_symbol = "-"
number = 0
has_number = False
for c in formula[1]:
if c != "+" and c != "-":
if c == "x":
if not has_number:
add_x = 1
else:
if number == 0:
add_x = 0
else:
add_x = number
if pre_symbol == "+":
x_count += add_x
else:
x_count -= add_x
number = 0
has_number = False
else:
has_number = True
number = number * 10 + int(c)
else:
num = eval(str(num) + pre_symbol + str(number))
number = 0
has_number = False
if c == "+":
pre_symbol = "-"
else:
pre_symbol = "+"
num = eval(str(num) + pre_symbol + str(number))
# 计算结果
if x_count == 0 and num == 0:
return "Infinite solutions"
if x_count == 0 and num != 0:
return "No solution"
return "x=" + str(-num // x_count)JalanJiang commented
优化:
- 函数封装
- 借助列表
class Solution:
def solveEquation(self, equation: str) -> str:
formula = equation.split("=")
def get_count(formula):
num_list = []
pre_symbol = "+"
x_count = 0
num = 0
for c in formula:
# 不是运算符
if c != "+" and c != "-":
if c == "x":
add_x = 1 if len(num_list) == 0 else int("".join(num_list))
if pre_symbol == "+":
x_count += add_x
else:
x_count -= add_x
num_list = [] # 清空列表
else:
# 是数字
num_list.append(c)
# 是运算符
else:
if len(num_list) != 0:
num = eval(str(num) + pre_symbol + "".join(num_list))
pre_symbol = c
num_list = []
# 最后遗漏的数字
if len(num_list) != 0:
num = eval(str(num) + pre_symbol + "".join(num_list))
return [x_count, num]
left = get_count(formula[0])
right = get_count(formula[1])
x_count = left[0] - right[0]
num = left[1] - right[1]
# 计算结果
if x_count == 0 and num == 0:
return "Infinite solutions"
if x_count == 0 and num != 0:
return "No solution"
return "x=" + str(-num // x_count)