Solve a given equation and return the value ofx
in the form of string "x=#value". The equation contains only '+', '-' operation, the variablex
and its coefficient. If there is no solution for the equation, return "No solution". If there are infinite solutions for the equation, return "Infinite solutions". If there is exactly one solution for the equation, we ensure that the value ofx
is an integer.
To solve a linear equation of single variable:
- We need to find the coefficient of the x and the constant value.
- We would treat the coefficient and the constant differently if they appear on different sides of
=
, as we need to flip the sign. Therefore, we need ahelper
function to parse both the left and right parts. - In the
helper
, we need to deal with three cases:equation[i]
is a numberequation[i]
is thex
equation[i]
is+/-
class Solution: def solveEquation(self, equation: str) -> str: def helper(l,r): # left inclusive and right exclusive constant = unknown = 0 sign,val = 1,'' while l < r: if equation[l].isnumeric(): val += equation[l] elif equation[l] == 'x': unknown += sign*int(val or '1') # in case the coefficient is 1 val = '' else: # meet a +/- if val: constant += sign*int(val) sign = 1 if equation[l]=='+' else -1 val = '' l += 1 if val: # if the last digit is a number constant += sign*i return constant,unknown mid = equation.find('=') constant1,unknown1 = helper(0,mid) constant2,unknown2 = helper(mid+1,len(equation)) const,var = constant2-constant1,unknown1-unknown2 # print(a,b) if var == 0: if const == 0: return "Infinite solutions" else: return "No solution" else: return 'x={}'.format(const//var)