640. 求解方程

题目

求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - ‘操作,变量 x 和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x 是一个整数。
示例 1:

  1. 输入: "x+5-3+x=6+x-2"
  2. 输出: "x=2"

示例 2:

  1. 输入: "x=x"
  2. 输出: "Infinite solutions"

示例 3:

  1. 输入: "2x=x"
  2. 输出: "x=0"

示例 4:

  1. 输入: "2x+3x-6x=x+2"
  2. 输出: "x=-1"

示例 5:

  1. 输入: "x=x+2"
  2. 输出: "No solution"

题解

这是经典的四则运算题,可以参考前两道题:224. 基本计算器227. 基本计算器 II
无他,唯手熟尔。

  1. class Solution:
  2. def solveEquation(self, equation: str) -> str:
  3. S = '0+'+equation+'+0'
  4. res = 0
  5. num = 0
  6. sgn = 1
  7. g_sgn = 1
  8. s_x = 0
  9. for i in range(len(S)):
  10. c = S[i]
  11. if c.isdigit():
  12. num = num*10+int(c)
  13. elif c == '+' or c == '-':
  14. res += num*sgn
  15. num = 0
  16. sgn = g_sgn if c == '+' else -1*g_sgn
  17. elif c == '=':
  18. res += num*sgn
  19. num = 0
  20. sgn = g_sgn if c == '+' else -1*g_sgn
  21. g_sgn = -1
  22. elif c == 'x':
  23. if S[i-1].isdigit():
  24. s_x += num*sgn
  25. num = 0
  26. else:
  27. s_x += 1*sgn
  28. sgn = g_sgn
  29. if s_x == 0:
  30. if res == 0:
  31. return "Infinite solutions"
  32. else:
  33. return "No solution"
  34. else:
  35. return 'x='+str(-1*res//s_x)

image.png