640. Solve the Equation

在复盘里已经说过了,这种string处理的题就像写作文一样。。感觉没什么意思,写出来的代码很长。我写的时候由于不知道怎么(或者说觉得很麻烦)处理系数coefficient不止一位的情况就放弃了,下面的SOLUTION写得比较清楚:
它是用从左到右遍历地用breakIt方法来分开每个部分,最后把系数算出来,值算出来,判断就好了,还是比较neat的。

    public String coeff(String x) {
        if (x.length() > 1 && x.charAt(x.length() - 2) >= '0' && x.charAt(x.length() - 2) <= '9')
            return x.replace("x", "");
        return x.replace("x", "1");
    }
    public String solveEquation(String equation) {
        String[] lr = equation.split("=");
        int lhs = 0, rhs = 0;
        for (String x: breakIt(lr[0])) {
            if (x.indexOf("x") >= 0) {
                lhs += Integer.parseInt(coeff(x));
            } else
                rhs -= Integer.parseInt(x);
        }
        for (String x: breakIt(lr[1])) {
            if (x.indexOf("x") >= 0)
                lhs -= Integer.parseInt(coeff(x));
            else
                rhs += Integer.parseInt(x);
        }
        if (lhs == 0) {
            if (rhs == 0)
                return "Infinite solutions";
            else
                return "No solution";
        }
        return "x=" + rhs / lhs;
    }
    public List< String > breakIt(String s) {
        List < String > res = new ArrayList< >();
        String r = "";
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '+' || s.charAt(i) == '-') {
                if (r.length() > 0)
                    res.add(r);
                r = "" + s.charAt(i);
            } else
                r += s.charAt(i);
        }
        res.add(r);
        return res;
    }

你可能感兴趣的:(640. Solve the Equation)