leetcode640.求解方程

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

如果方程没有解,请返回 "No solution" 。如果方程有无限解,则返回 “Infinite solutions” 。

题目保证,如果方程中只有一个解,则 'x' 的值是一个整数。

示例 1:

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

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

输入: equation = "2x=x"
输出: "x=0"
 

提示:

3 <= equation.length <= 1000
equation 只有一个 '='.
equation 方程由整数组成,其绝对值在 [0, 100] 范围内,不含前导零和变量 'x' 。 

解题思路
本题的思路较为简单,按照方程式的写法,将=号左边的x的系数统计出来,并且将常熟之和统计出来,并且设置op表示正负号,然后将左边式子之和全部变为相反数,将op变为1,后按照原方式进行运算,最后根据x和num的值返回对应结果。

代码如下:

class Solution {
    public String solveEquation(String equation) {
      char[] ch = equation.toCharArray();
      int len = ch.length;
      int op = 1;//表示当前运算符的正负,1为正,0为负
      int num = 0;//表示当前运算的数字总和
      int x = 0;//表示当前的x总和

      int i = 0;
      int j = 0;
      while(i < len){
          if(ch[i] == '+'){
              op = 1;
              i++;
          }else if(ch[i] == '-'){
              op = -1;
              i++;
          }else if(ch[i] == '='){
              num *= -1;
              x *= -1;
              i++;
              op = 1;
          }else{
              j = i;
              while(j < len && ch[j] != '-' && ch[j] != '+' && ch[j] != '='){
                j++;
              }
              if(ch[j - 1] == 'x'){
                x += j - 1 == i ? op : op * Integer.parseInt(equation.substring(i,j - 1));
              }else{
                num += op * Integer.parseInt(equation.substring(i,j));
              }
              i = j;
          }
      }
      if(x == 0 && num == 0){
          return "Infinite solutions";
      }else if(x == 0){
          return "No solution";
      }else{
          return "x=" + (num / -x);
      }
    }
}

作者:i2everent-mestorfizh
链接:https://leetcode.cn/problems/solve-the-equation/solution/by-i2everent-mestorfizh-pabg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值