当前位置:网站首页>【640. Solving Equations】

【640. Solving Equations】

2022-08-10 22:36:00 [email protected]

来源:力扣(LeetCode)

描述:

求解一个给定的方程,将 x 以字符串 "x=#value" 的形式返回.该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数.

如果方程没有解,请返回 "No solution" .如果方程有无限解,则返回 “Infinite solutions” .

题目保证,如果方程中只有一个解,则 'x' 的值是一个整数.

示例 1:

输入: equation = "x+5-3+x=6+x-2"
输出: "x=2"

示例 2:

输入: equation = "x=x"
输出: "Infinite solutions"

示例 3:

输入: equation = "2x=x"
输出: "x=0"

提示:

  • 3 <= equation.length <= 1000
  • equation 只有一个 ‘=’.
  • equation 方程由整数组成,其绝对值在 [0, 100] 范围内,不含前导零和变量 ‘x’

方法:解析

1
代码:

class Solution {
    
public:
    string solveEquation(string equation) {
    
        int factor = 0, val = 0;
        int index = 0, n = equation.size(), sign1 = 1; // The default coefficient on the left side of the equation is positive
        while (index < n) {
    
            if (equation[index] == '=') {
    
                sign1 = -1; // The default coefficient on the right-hand side of the equation is negative
                index++;
                continue;
            }

            int sign2 = sign1, number = 0;
            bool valid = false; // 记录 number 是否有效
            if (equation[index] == '-' || equation[index] == '+') {
     // 去掉前面的符号
                sign2 = (equation[index] == '-') ? -sign1 : sign1;
                index++;
            }
            while (index < n && isdigit(equation[index])) {
    
                number = number * 10 + (equation[index] - '0');
                index++;
                valid = true;
            }

            if (index < n && equation[index] == 'x') {
     // 变量
                factor += valid ? sign2 * number : sign2;
                index++;
            } else {
     // 数值
                val += sign2 * number;
            }
        }

        if (factor == 0) {
    
            return val == 0 ? "Infinite solutions" : "No solution";
        }
        return string("x=") + to_string(-val / factor);
    }
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.9 MB, 在所有 C++ 提交中击败了83.55%的用户
复杂度分析
时间复杂度: O(n),其中 n 是字符串 equation 的长度.
空间复杂度: O(1).
author:LeetCode-Solution

原网站

版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/222/202208102149022968.html