leetCode 640. 求解方程

思路

  • 就是把=号左右两边切割开来 然后再单独计算左右两边的x的数值跟数字的大小 然后把x跟数值分在两边 然后在判断如果 x=0

  • 值为0的情况下 返回Infinite solutions 如果仅仅x=0 返回 No solution 如果都不是 则用 数值/x的值然后拼接 返回结果

  • 难点在于 切割左右的x值跟数值 这里我用最复杂的 双指针 碰到符号就截取 这种方法来做 如果有大佬,可以直接使用正则表达式来会方便很多

public class Solvethequation {

    /**
     * 思路就是 把=号左右两边切割开来
     * 然后再单独计算左右两边的x的数值跟数字的大小
     * 然后把x跟数值分在两边 然后在判断如果 x=0 值为0的情况下 返回Infinite solutions 如果仅仅x=0 返回 No solution
     * 如果都不是 则用 数值/x的值 然后拼接 返回结果
     * 难点在于 切割左右的x值跟数值  这里我用最复杂的 双指针 碰到符号就截取 这种方法来做  如果有大佬,可以直接使用正则表达式来会方便很多
     * */
    public static void main(String[] args) {
        Solvethequation s = new Solvethequation();
        System.out.println(s.solveEquation("-x=-1"));
    }

    public String solveEquation(String equation) {

        //切割
        String[] split = equation.split("=");
//        String[] split1 = split[0].split("[+|-]?[0-9]*");  要是有能力的话用正则表达式来处理这一步是最好的

        //左边
        String s = split[0];

        ArrayList<String> list = new ArrayList<>();//用于存储 类似于 +x -2x +5
        int l = 0;//左指针
        int r = l;//有指针

        while (l < s.length()) {//将符合存储的数据给切割出来 存储到list中
            if (s.charAt(r) == '+' || s.charAt(r) == '-' && r != 0) { //r!=0 是因为如果第一个是 -2x 这种情况
                if (l != r) {
                    list.add(s.substring(l, r));
                    l = r;
                    r++;
                }
            } else {
                if (++r >= s.length()) {//如果最后超过了界限  后面已经没有  直接截取并结束
                    list.add(s.substring(l, r));
                    break;
                }
            }
        }

        int x = 0;//x的值 为5  2x+3x+5=2x+3
        int num = 0;//数值 为5
        for (int i = 0; i < list.size(); i++) {//计算x的值跟数值
            String data = list.get(i);
            if (data.contains("x")) {
                if (data.charAt(0) == '+' || data.charAt(0) == '-') {
                    if (data.length() > 2) {
                        x += (Integer.parseInt(data.substring(0, data.length() - 1)));
                    } else {
                        if (data.charAt(0) == '-') {
                            x -= 1;
                        } else {
                            x += 1;
                        }
                    }
                } else {
                    if (data.length() > 1) {
                        x += (Integer.parseInt(data.substring(0, data.length() - 1)));
                    } else {
                        x += 1;
                    }
                }
            } else {
                num += (Integer.parseInt(data));
            }
        }

        System.out.println(x);//x的值
        System.out.println(num);//数值
        System.out.println(list);//输出列表中的  -2x +5 6 -2 +5x 2x 等等查看分割是否正确

        //右边

        String s1 = split[1];

        ArrayList<String> list1 = new ArrayList<>();
        int l1 = 0;
        int r1 = l1;

        while (l1 < s1.length()) {
            if (s1.charAt(r1) == '+' || s1.charAt(r1) == '-' && r1 != 0) {
                if (l1 != r1) {
                    list1.add(s1.substring(l1, r1));
                    l1 = r1;
                    r1++;
                }
            } else {
                if (++r1 >= s1.length()) {
                    list1.add(s1.substring(l1, r1));
                    break;
                }
            }
        }

        int x1 = 0;
        int num1 = 0;
        for (int i = 0; i < list1.size(); i++) {
            String data = list1.get(i);
            if (data.contains("x")) {
                if (data.charAt(0) == '+' || data.charAt(0) == '-') {
                    if (data.length() > 2) {
                        x1 += (Integer.parseInt(data.substring(0, data.length() - 1)));
                    } else {
                        if (data.charAt(0) == '-') {
                            x1 -= 1;
                        } else {
                            x1 += 1;
                        }
                    }
                } else {
                    if (data.length() > 1) {
                        x1 += (Integer.parseInt(data.substring(0, data.length() - 1)));
                    } else {
                        x1 += 1;
                    }
                }
            } else {
                num1 += (Integer.parseInt(data));
            }
        }

        System.out.println(x1);
        System.out.println(num1);
        System.out.println(list1);

        int x2 = x - (x1);

        int num2 = num1 - (num);

        if (x2 == 0 && num2 == 0) {//判断是否为第一种情况
            return "Infinite solutions";
        }else if(x2 == 0){//判断是否为第二种情况
            return "No solution";
        }

        int result = (num2 / x2);//计算结果

        return "x=" + result;//拼接返回结果
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值