力扣640(java)-求解方程(中等)

题目:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/solve-the-equation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.首先将方程式以 “=” 作为分割符进行左右分割,并将 ‘-’ 替换成 ‘+-’;

2.设置两个变量统计x的系数 xnum和常数 num;

3.再遍历分割出的左边的字符串,以 '+' 作为分割符,分割出含有x的字符串和常数字符串;

  • 如果遍历的字符串为"x",则xnum++;
  • 如果遍历的字符串为"-x",,则xnum--;
  • 如果遍历的字符串为含有其他的常数项的x,,则xnum+常数项(常数项可为正可为负);
  • 否则,就是遍历的常数项,想象需要将常数项移到等号右边,则常数num - 当前常数。

4.再遍历分割出的右边的字符串,以 '+' 作为分割符,分割出含有x的字符串和常数字符串,这与第三步类似;

  • 如果遍历的字符串为"x",则xnum--(想象需要将含x的项移到等号左边);
  • 如果遍历的字符串为"-x",,则xnum++(想象需要将含x的项移到等号左边);
  • 如果遍历的字符串为含有其他的常数项的x,,则xnum-常数项(常数项可为正可为负);
  • 否则,就是遍历的常数项,等号右边的常数项不需要移动,则常数num +当前常数。

5.返回结果

  • 如果xnum == num == 0,则有无穷解;
  • 如果就xnum==0,则无解;
  • 如果不满足以上两种情况,则x = num / xnum 。

代码:

 1 class Solution {
 2     public String solveEquation(String equation) {
 3         //将负号换成正负号,并以等号为分割符进行左右分割
 4         String[] s1 = equation.replace("-","+-").split("=");
 5         //设置两个变量统计x的系数和常数
 6         int xnum = 0,num = 0;
 7         //遍历等号左边的数
 8         for (String s: s1[0].split("\\+")){
 9             if (s.length() == 0) continue;
10             if (s.contains("x")){
11                 if (s.equals("x"))
12                     xnum++;
13                 else if (s.equals("-x"))
14                     xnum--;
15                 else
16                 //x前面有>1的系数
17                     xnum += Integer.parseInt(s.replace("x",""));
18             }
19             else{
20                 num -= Integer.parseInt(s);
21             }
22         }
23             //遍历等号右边的数
24         for (String s: s1[1].split("\\+")){
25             if (s.length() == 0) continue;
26             if (s.contains("x")){
27                 if (s.equals("x"))
28                     xnum--;
29                 else if (s.equals("-x"))
30                     xnum++;
31                 else
32                 //x前面有>1的系数
33                     xnum -= Integer.parseInt(s.replace("x",""));
34             }
35             else{
36                 num += Integer.parseInt(s);
37             }
38         }
39             if (xnum == 0 && num == 0)
40                 return "Infinite solutions";
41             if (xnum == 0)
42                 return "No solution";
43             return "x=" + (num/xnum);
44 
45             }
46         }

 

posted on 2022-05-29 10:42  我不想一直当菜鸟  阅读(182)  评论(0编辑  收藏  举报