【LeetCode】640. 求解方程

题目

求解一个给定的方程,将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 只有一个 ‘=’.
方程由绝对值在 [0, 100] 范围内且无任何前导零的整数和变量 ‘x’ 组成。

题解

逐个遍历处理
等号右边的可以看作移到左边,即+变 - ,- 变 +
还要注意x的系数的处理

class Solution {
    
    
public:
    string solveEquation(string equation) {
    
    
        int x = 0;//x系数
        int sign = 1;//符号
        int sum = 0;//常数和
        int len = equation.length();
        int leftOrright = 1;//等式左or右

        for(int i=0;i<len;i++)
        {
    
    
            if(equation[i] == '+')
            {
    
    
                sign = 1;
            }
            else if(equation[i] == '-')
            {
    
    
                sign = -1;
            }
            else if(equation[i] == '=')
            {
    
    
                sign = 1;
                leftOrright = -1;
            }
            else
            {
    
    
                int num = 0;
                bool flag = false;//标志是否遇到了整数,没遇到的话就代表只遇到了x,这时要单独处理
                
                //获取遇到的整数值
                while(i<len && isdigit(equation[i]))
                {
    
    
                    num = num*10+equation[i++]-'0';
                    flag = true;
                }
                
                num = num*sign*leftOrright;//加符号

                if(equation[i]=='x')
                {
    
    
                    if(flag)
                        x += num;
                    else
                        x += 1*sign*leftOrright;
                }
                else
                {
    
    
                    sum += num;
                    i--;
                }
            }
        }

        if(x!=0)
            return "x="+to_string(-sum/x);
        else
            return sum==0 ? "Infinite solutions" : "No solution";
    }
};

猜你喜欢

转载自blog.csdn.net/qq_45972928/article/details/126305212