640. 求解方程

求解一个给定的方程,将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"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/solve-the-equation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
    public String solveEquation(String equation) {
         String[] strArr = equation.split("=");
         ArrayList<Integer> left = calculate(strArr[0]);
         ArrayList<Integer> right = calculate(strArr[1]);
         // x 的系数
         int ratio = left.get(0) - right.get(0);
         // 常数
         int number = right.get(1) - left.get(1);
         if(ratio == 0 && number == 0){
             return "Infinite solutions";
         }else if(ratio == 0 && number != 0){
             return "No solution";
         }else{
             return "x=" + (number/ratio);
         }
    }
    
    public ArrayList<Integer> calculate(String str){
        ArrayList<Integer> list = new ArrayList();
        int i = 0;
        int j = 1;
        int ratio = 0;
        int num = 0;
        String s = "";
        while(j <= str.length()){
            if(j == str.length() || str.charAt(j) == '+' || str.charAt(j) == '-'){
                 s = str.substring(i, j);
                 // x 的系数
                 if(s.charAt(s.length() - 1) == 'x'){
                     if(s.length() == 1 || (s.length() == 2 && s.charAt(0) == '+')){
                         ratio = ratio + 1;
                     }else if(s.length() == 2 && s.charAt(0) == '-'){
                         ratio = ratio - 1;
                     }else{
                         ratio = ratio + Integer.valueOf(s.substring(0, s.length() - 1));
                     }
                     
                 // 非x的系数
                 }else{
                 num = num + Integer.valueOf(s);        
                 }
                 i = j;
            }
            j++;
        }
    list.add(ratio);
    list.add(num);
    return list;
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值