题目名称

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

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

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

示例

输入: equation = “x+5-3+x=6+x-2”

输出: “x=2”

输入: equation = “x=x”

输出: “Infinite solutions”

题解

可以先通过等号切割字符串,将方程分解为左右两个计算式

分别计算左右两个计算式中 x 的系数,及非 x 数的和,然后进行等式交换,使得 x 相关数在等式左边,非 x 相关数在等式右边

如果 x 的系数 为0且 非 x 数的和为0,则方程有无限解 返回 Infinite solutions

如果 x 的系数 为0且 非 x 数的和为0,则方程有无限解 返回 No solution

答案

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
var solveEquation = function(equation) {
const eq = equation.split("=")
let left = eq[0], right = eq[1]
let { xn: ln, total: lt } = computedX(left)
let { xn: rn, total: rt } = computedX(right)
let x = ln - rn, r = rt - lt
if(x === 0 && r === 0) return "Infinite solutions"
if(x === 0) return "No solution"
return `x=${r/x}`
};

function computedX(str) {
let xn = 0, total = 0, flag = 1, num = ""
for(let i = 0; i < str.length; i++) {
if(str[i] === "x") {
xn += num === "" ? 1 * flag : +num * flag
num = ""
} else if(str[i] === "-") {
total += (+num || 0) * flag
flag = -1
num = ""
} else if(str[i] === "+") {
total += (+num || 0) * flag
flag = 1
num = ""
} else {
num += str[i]
}
}
total += (+num || 0) * flag
return {
xn,
total
}
}