抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

模拟,即题目给定规则,要求找到符合条件的解。

以算数计算题为例,求解模拟题的过程。

640.求解方程

Problem: 640. 求解方程

求解一个给定的方程,将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 只有一个 '='
  • 方程由绝对值在 [0, 100]  范围内且无任何前导零的整数和变量 'x' 组成。​​​

  1. 思路

    模拟题,分别对运算符进行判断,找出跟解相关的x和num的值,然后求解。

  2. 解题方法

    ‘+’和’-‘作为数值符号;’=’作为等式左边计算完毕的判断,然后把’x’和’num’的符号取反然后继续运算;’x’如果没有数字要记作1;最后的答案对’x’的值和’num’的值判断即可。

  3. 复杂度

  • 时间复杂度:
    跟方程表达式的长度相关,$O(n)$

  • 空间复杂度:

    $O(n)$。如果用 .charAt() 可以降为$O(1)$

  1. Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution {
public String solveEquation(String equation) {
// 模拟法 对 + - = 和 x 分别做判断
int n = equation.length();
int x = 0, num = 0;
char[] s = equation.toCharArray();
int index = 0;
int po = 1;
while(index < n) {
char c = s[index];
// 记录改变数字的符号
if(c == '+') {
index ++;
po = 1;
} else if (c == '-') {
index ++;
po = -1;
} else if (c == '=') {
// 左边算完了,对调算右边
x = -x; num = -num; po = 1;
index++;
} else {
// 求数字
int j = index;
while(j < n && s[j] != '+' && s[j] != '-' && s[j] != '=') j++;
// 如果数字后一位为x
if(s[j-1] == 'x') {
x += ((j - 1 == index) ? 1 : Integer.parseInt(equation.substring(index, j - 1))) * po;
} else {
// 不为x,记录num的值
num += Integer.parseInt(equation.substring(index, j)) * po;
}
// 找完数字,继续查找下一个
index=j;
}
}
// 如果没有x,只有数字,无解
if (x == 0 && num != 0) {
return "No solution";
} else if (x == 0 && num == 0) {
// 如果没有x和数字,无穷解
return "Infinite solutions";
} else {
return "x=" + -1 * (num / x);
}
}
}

评论