[LeetCode]640解方程式

本文介绍了一种通过解析字符串方程求解未知数x的方法。该算法首先将方程按等号分割为左右两部分,然后分别计算两边的x系数总和及常数总和,最后通过比较和运算得出x的值或方程的解集状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

示例 1:

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

输入: "x=x"
输出: "Infinite solutions"
示例 3:

输入: "2x=x"
输出: "x=0"
示例 4:

输入: "2x+3x-6x=x+2"
输出: "x=-1"
示例 5:

输入: "x=x+2"
输出: "No solution"

  

 

思路:考的是字符串的解析

跟平时学的解方程的一样,根据等号将方程分为两个部分

将两端的方程的X的系数和,和常数和计算出来,然后两边的X的系数和相减,常数和相减,相除,分清楚情况就行

解析字符串注意边界

public class Main {

    public static void main(String[] args) {
        System.out.println(solveEquation("x+5-3+x=6+x-2"));
    }
    public  static String solveEquation(String equation) {
        //等号为界,分为两边
        String[] split = equation.split("=");
        int[] left = findPreNumSum(split[0]);
        int[] right = findPreNumSum(split[1]);
        if (left[0]==right[0]&&left[1]==right[1])
            return "Infinite solutions";
        else if (left[0]==right[0]&&left[1]!=right[1]){
            return "No solution";
        }else {
            return "x="+(right[1]-left[1])/(left[0]-right[0]);
        }
    }
    public static int[] findPreNumSum(String s){
        int x_sum = 0;
        int integerSum = 0;
        int length = s.length();
        for (int i = 0;i < length;i++){
            char it = s.charAt(i);
            char pre = i>0?s.charAt(i-1):'n';
            char next = i>length-2?'n':s.charAt(i+1);
            if(it=='+'||it=='-')
                continue;
            //此分支计算等号某一侧的x的系数和
            if (it == 'x'||it=='X'){
                if (pre=='n'){
                    //x位于第一位
                    x_sum = x_sum + 1;
                }else {
                    int count = 1;
                    int sum = 0;
                    int j;
                    for (j = i-1;;){
                        //从当前遍历位(即x)的前一位往前推
                        if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){
                            if (i-j==1&&(s.charAt(j)=='+'||s.charAt(j)=='-')){
                                //非第一位的x系数为1/-1的情况
                                x_sum = x_sum + (s.charAt(j)=='+'?1:(-1));
                                System.out.println(x_sum);
                            }
                            //x系数累乘的倍数归为1
                            count = 1;
                            break;
                        }
                        //算系数,不分加减
                        sum = sum + (s.charAt(j)-'0')*count;
                        count = count * 10;
                        j--;

                    }
                    //根据前面的符号来计算已遍历的x的系数和
                    x_sum = x_sum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum;
                    count = 1;
                    sum = 0;
                }
            }
            //此分支计算等号某一侧的常数和
            else {
                //若此时遍历不是邻近x的数字,跳过
                if (('0'<=next&&next<='9')||next=='x')
                    continue;
                int count = 1;
                int sum = 0;
                int j;
                //从当前遍历位往前推,即算上本身
                for (j = i;;){
                    if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){
                        count = 1;
                        break;
                    }
                    //同上,计算系数,不分符号
                    sum = sum + (s.charAt(j)-'0')*count;
                    count = count * 10;
                    j--;
                }
                //带上符号算已遍历的常数的和
                integerSum = integerSum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum;
                count = 1;
                sum = 0;
            }
        }
        System.out.println(x_sum+"-"+integerSum);
        //返回此侧的x的系数和和常数和
        return new int[]{x_sum,integerSum};
    }

}

  

太菜了,各位有更牛逼的解决办法告诉一下我呀

 

转载于:https://www.cnblogs.com/Yintianhao/p/9892752.html

内容概要:本文详细介绍了基于结构不变补偿的电液伺服系统低阶线性主动干扰抑制控制(ADRC)方法的实现过程。首先定义了电液伺服系统的基本参数,并实现了结构不变补偿(SIC)函数,通过补偿非线性项和干扰,将原始系统转化为一阶积分链结构。接着,设计了低阶线性ADRC控制器,包含扩展状态观测器(ESO)和控制律,用于估计系统状态和总干扰,并实现简单有效的控制。文章还展示了系统仿真与对比实验,对比了低阶ADRC与传统PID控制器的性能,证明了ADRC在处理系统非线性和外部干扰方面的优越性。此外,文章深入分析了参数调整与稳定性,提出了频域稳定性分析和b0参数调整方法,确保系统在参数不确定性下的鲁棒稳定性。最后,文章通过综合实验验证了该方法的有效性,并提供了参数敏感性分析和工程实用性指导。 适合人群:具备一定自动化控制基础,特别是对电液伺服系统和主动干扰抑制控制感兴趣的科研人员和工程师。 使用场景及目标:①理电液伺服系统的建模与控制方法;②掌握低阶线性ADRC的设计原理和实现步骤;③学习如何通过结构不变补偿简化复杂系统的控制设计;④进行系统仿真与实验验证,评估不同控制方法的性能;⑤掌握参数调整与稳定性分析技巧,确保控制系统在实际应用中的可靠性和鲁棒性。 阅读建议:本文内容详尽,涉及多个控制理论和技术细节。读者应首先理电液伺服系统的基本原理和ADRC的核心思想,然后逐步深入学习SIC补偿、ESO设计、控制律实现等内容。同时,结合提供的代码示例进行实践操作,通过调整参数和运行仿真,加深对理论的理。对于希望进一步探索的读者,可以关注文中提到的高级话题,如频域稳定性分析、参数敏感性分析等,以提升对系统的全面掌控能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值