Leetcode 640. 求解方程 (Parse解析字符串一元方程)

比较考验基本功

class Solution {
public:
    string solveEquation(string equation) {
        int k = equation.find("=");
        auto [a1, a0] = work(equation.substr(0, k));
        auto [b1, b0] = work(equation.substr(k + 1));
        //cout << a1 << " " << a0 << endl;
        //cout << b1 << " " << b0 << endl;
        if (a1 == b1 && a0 == b0) {
            return "Infinite solutions";
        } else if (a1 == b1 && a0 != b0) {
            return "No solution";
        }
        return "x=" + to_string((b0 - a0) / (a1 - b1));
    }

    pair<int, int> work(string expression) {
        int i = 0, n = expression.size();
        int a1 = 0, a0 = 0;
        int sign = 1;
        while (i < n) {
            if (i < n && expression[i] == '+') {
                sign = 1;
                i++;
            }
            if (i < n && expression[i] == '-') {
                sign = -1;
                i++;
            }
            if (i < n && expression[i] == 'x') {
                a1 += sign * 1;
                i++;
            }
            int num = 0;
            while (i < n && isdigit(expression[i])) {
                num = num * 10 + (expression[i++] - '0');
            }
            if (i < n && expression[i] == 'x') {
                a1 += sign * num;
                i++;
            } else{
                a0 += sign * num;
            }
        }
        return {a1, a0};
    }
};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值