Leetcode 640. 求解方程

Leetcode 640. 求解方程

  1. 求解方程

求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。

如果方程没有解,请返回“No solution”。

如果方程有无限解,则返回“Infinite solutions”。

如果方程中只有一个解,要保证返回值 x 是一个整数。

示例 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”

class Solution {
    public String solveEquation(String equation) {
    	//将字符串分两部分将- 替换为+-
        String[] equations = equation.replace("-","+-").split("=");
        //判断两部分的开头是否为-
        boolean flag1 = false,flag2 = false;
        if(equations[0].charAt(0) == '+') flag1 = true;
        if(equations[1].charAt(0) == '+') flag2 = true;
        //分割+
        String[] left = equations[0].split("\\+");
        String[] right = equations[1].split("\\+");
        int xNum = 0;
        int pNum = 0;
        int i = 0;
        if(flag1) i = 1;
        for(;i < left.length;i++){
        	//如果字符串中有x的字符串并记录所有的剩下的x个数
            if(left[i].contains("x")){
                if(left[i].length() == 1){
                    xNum += 1;//如果为单个x则为1
                }else if(left[i].length() == 2){
                //判断x是否为 -
                    if(left[i].charAt(0) == '-'){
                        xNum -= 1;
                    }else{
                        xNum += Integer.valueOf(left[i].split("x")[0]);
                    }
                }else{
                    xNum += Integer.valueOf(left[i].split("x")[0]);
                }
            }else if(left[i] != ""){
            //记录常数  
                pNum -= Integer.valueOf(left[i]);
            }
        }
        int j = 0;
        if(flag2) j = 1;
        for(;j < right.length;j++){
            if(right[j].contains("x")){
                if(right[j].length() == 1){
                    xNum -= 1;
                }else if(right[j].length() == 2){
                    if(right[j].charAt(0) == '-'){
                        xNum += 1;
                    }else{
                        xNum -= Integer.valueOf(right[j].split("x")[0]);
                    }
                }else{
                    xNum -= Integer.valueOf(right[j].split("x")[0]);
                }
            }else if(right[j] != ""){
                pNum += Integer.valueOf(right[j]);
            }
        }
        if(xNum == 0&&pNum == 0)return "Infinite solutions";
        else if(xNum == 0&&pNum != 0)return "No solution";
        else if(pNum == 0) return "x=" + 0;
        else return "x=" + (pNum / xNum);
    }
}

执行结果:
通过
显示详情
执行用时:4 ms, 在所有 Java 提交中击败了83.86% 的用户
内存消耗:37 MB, 在所有 Java 提交中击败了42.51% 的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值