• 【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";
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
  • 相关阅读:
    链表的问题
    day14I102.二叉树的层序遍历
    linux系统监控prometheus关联Grafana展示数据
    windows升级新版本mysql
    100+经典Java面试题及答案解析
    基于深度学习的人脸表情识别的AR川剧变脸(一)
    计算机视觉专家:如何从C++转Python
    SAP会计科目启用未清项管理
    如何禁止在堆上和栈上创建对象
    EIP-3664合约研究笔记06--text功能分析
  • 原文地址:https://blog.csdn.net/qq_45972928/article/details/126305212