640. Solve the Equation

class Solution {
public:
    string solveEquation(string equation) {
        int idx = equation.find('=');
        
        int x1 = 0, v1 = 0, x2 = 0, v2 = 0, idx1 = 0, idx2 = 0;
        helper(equation.substr(0, idx), idx1, x1, v1);
        helper(equation.substr(idx+1), idx2, x2, v2);
        
        int x = x1 - x2;
        int v = v2 - v1;
        if (x == 0 && v == 0)
            return "Infinite solutions";
        else if (x == 0)
            return "No solution";
        else
            return "x=" + to_string(v / x);
    }
    void helper(const string& s, int& idx, int &x, int &v) {
        int n = s.length();
        if (idx >= n)   return;
        
        int flag = 1;
        if (s[idx] == '+') {
            idx++;
        }
        if (s[idx] == '-') {
            flag = -1;
            idx++;
        }
        if (idx >= n)   return;
        
        if (isdigit(s[idx])) {
            int t = 0;
            while (idx < n && isdigit(s[idx])) {
                t = t * 10 + s[idx] - '0';
                idx++;
            }
            if (idx >= n || s[idx] != 'x')
                v += t * flag;
            else {
                idx++;
                x += t * flag;
            }
        }
        else {
            x += 1 * flag;
            idx++;
        }
        
        helper(s, idx, x, v);
    }
};

猜你喜欢

转载自www.cnblogs.com/JTechRoad/p/10049568.html