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 只有一个 ‘=’.
equation 方程由整数组成,其绝对值在 [0, 100] 范围内,不含前导零和变量 ‘x’ 。
思路:
时间复杂度:O(n),空间复杂度O(n)
模拟题
代码:
func solveEquation(equation string) string {
factor, val := 0, 0
i, n, sign := 0, len(equation), 1 // 等式左边默认系数为正
for i < n {
if equation[i] == '=' {
sign = -1 // 等式右边默认系数为负
i++
continue
}
s := sign
if equation[i] == '+' { // 去掉前面的符号
i++
} else if equation[i] == '-' {
s = -s
i++
}
num, valid := 0, false
for i < n && unicode.IsDigit(rune(equation[i])) {
valid = true
num = num*10 + int(equation[i]-'0')
i++
}
if i < n && equation[i] == 'x' { // 变量
if valid {
s *= num
}
factor += s
i++
} else { // 数值
val += s * num
}
}
if factor == 0 {
if val == 0 {
return "Infinite solutions"
}
return "No solution"
}
return "x=" + strconv.Itoa(-val/factor)
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:1.8 MB, 在所有 Go 提交中击败了61.90%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!