【LeetCode】640. 方程式の解法

トピック

指定された方程式を解き、x を文字列 "x=#value" として返します。方程式には、「+」、「-」演算、変数 x、およびそれに対応する係数のみが含まれます。
方程式に解がない場合は、「解がありません」を返します。方程式に無限解がある場合、「無限解」を返します。
タイトルは、方程式の解が 1 つしかない場合、「x」の値が整数であることを保証しています。

例 1:

入力: 方程式 = "x+5-3+x=6+x-2"
出力: "x=2"

例 2:

入力: 方程式 = “x=x”
出力: “無限解”

例 3:

入力: 方程式 = "2x=x"
出力: "x=0"

ヒント:

3 <= 式.長さ <= 1000
式には '=' が 1 つだけあります.
式は [0, 100] の範囲内の絶対値を持つ整数で構成され、先行ゼロと変数 'x' はありません.

答え

1つずつトラバース処理
.等号の右辺は左へ移動とみなすことができる.つまり+は-に,-は+に変わる.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