Daily LeetCode – day0012 0640. Solve the Equation

// 0640. Solve the Equation
class Solution {
    public String solveEquation(String equation) {
        equation += '+';
        boolean beforeEqualSign = true;
        boolean positive = true;
        boolean isConstant = true;
        int totalCoefficients = 0;
        int totalConstants = 0;
        int num = 0;
        for (int i = 0; i < equation.length(); ++i) {
            char charAtI = equation.charAt(i);
            if (charAtI == '+' || charAtI == '-' || charAtI == '=') {
                if (!positive) {
                    num *= -1;
                }
                if (isConstant) {
                    totalConstants += num;
                } else {
                    totalCoefficients += num;
                }
                if (charAtI == '+') {
                    positive = beforeEqualSign;
                } else if (charAtI == '-') {
                    positive = !beforeEqualSign;
                } else {
                    positive = false;
                    beforeEqualSign = false;
                }
                isConstant = true;
                num = 0;
            } else if (charAtI == 'x') {
                isConstant = false;
                if (i == 0 || equation.charAt(i - 1) == '+' || equation.charAt(i - 1) == '=' || equation.charAt(i - 1) == '-') {
                    num = 1;
                }
            } else {
                num = num * 10 + charAtI - 48;
            }
        }
        totalConstants *= -1;
        if (totalCoefficients == 0) {
            if (totalConstants == 0) {
                return "Infinite solutions";
            } else {
                return "No solution";
            }
        }
        return "x=" + totalConstants / totalCoefficients;
    }
}
学习笔记:
这道题就是简单的字符串题,也用到了基础的数学。
做这类简单等式,就是需要移项整理,把x移到左边,把常数项移到右边。
那这里为了方便就先都放左边,然后最后算完乘以-1。
这里有个小技巧就是在最后加一个符号,让最后的一个数字也可以正常计算。
特别要注意的是x如果没有系数,那系数可不是0,但是本身系数是0也有可能。
然后我还发现了java的基本数据类型里面boolean无法直接转化为int,int没有办法取反,这实在太麻烦了,很多巧妙的计算得走判断。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。