[leetCode 640] 求解方程

解题思路

看到题目的时候第一反应是挺简单的,解析两边的字符串,然后找到x的系数和数字的大小,就找到了解。

但是实际处理的时候,要考虑很多情况,当前符号的正反、x没有系数的时候、最关键的是题目还要考虑x的系数可能为0,多种条件判断吧,反正做着挺恶心的。

代码

public class Solution {
    public String solveEquation(String equation) {
        String[] strings = equation.split("=");
        String left = strings[0];
        String right = strings[1];
        int[] string = parseString(left);
        int[] string1 = parseString(right);
        int num_x=string[0]-string1[0];
        int num=string1[1]-string[1];
        if (num_x==0 && num==0) return "Infinite solutions";
        else if (num_x==0 && num!=0) return "No solution";
        else return "x="+num/num_x;
    }
    public int[] parseString(String s){
        int t = 0;
        s=s+'+';    //让最后一个数字也能被处理
        int num_x = 0, num_ = 0;
        boolean flag = true; //记录当前符号的正反,是+还是-
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'x') {
                if (flag) {
                    if (t == 0) {
                        //看看是不是0x=0这种情况
                        if (i==0 || s.charAt(i-1)!='0')
                            num_x += 1;
                    }
                    else num_x += t;
                }else {
                     if (t==0) {
                        if (i == 0 || s.charAt(i - 1) != '0')
                            num_x -= 1;
                    }
                    else num_x-=t;
                }
                t = 0;
            } else if (s.charAt(i) == '+') {
                if (flag) {
                    num_ += t;
                } else num_ -= t;
                flag = true;
                t=0;
            } else if (s.charAt(i) == '-') {
                if (flag) {
                    num_ += t;
                } else num_ -= t;
                flag = false;
                t=0;
            } else {
                t *= 10;
                t += (int)(s.charAt(i)-'0');
            }
        }
        int[] ans=new int[2];
        ans[0]=num_x;
        ans[1]=num_;
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值