题目
求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+‘,’ - '操作,变量 x 和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x 是一个整数。
示例
输入: “x+5-3+x=6+x-2”
输出: “x=2”
输入: “x=x”
输出: “Infinite solutions”
输入: “2x=x”
输出: “x=0”
输入: “2x+3x-6x=x+2”
输出: “x=-1”
输入: “x=x+2”
输出: “No solution”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/solve-the-equation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
实现
方法1:python
class Solution:
def solveEquation(self, equation: str) -> str:
zuo, you = equation.split('=')
zuonum = zuo.replace('-', '+-').split('+')
younum = you.replace('-', '+-').split('+')
zuosum, zx, yousum, yx = 0, 0, 0, 0
for i in range(len(zuonum)):
if zuonum[i] == 'x':
zx += 1
elif zuonum[i] == '-x':
zx -=1
elif 'x' in zuonum[i]:
zx+=int(zuonum[i].split('x')[0])
elif zuonum[i] != '':
zuosum += int(zuonum[i])
for i in range(len(younum)):
if younum[i] == 'x':
yx += 1
elif younum[i] == '-x':
yx -=1
elif 'x' in younum[i]:
yx += int(younum[i].split('x')[0])
elif younum[i] != '':
yousum += int(younum[i])
if zx == yx and zuosum != yousum:
return("No solution")
elif zx == yx and zuosum == yousum:
return("Infinite solutions")
elif zuosum == yousum:
return("x=0")
else:
return("x=" + str(int((yousum - zuosum) / (zx - yx))))
方法2:java
class Solution {
public String solveEquation(String equation) {
String[] arr = equation.split("=");
String[] arrLeft = arr[0].replace("-", "+-").split("\\+");
String[] arrRight = arr[1].replace("-", "+-").split("\\+");
//记录x的系数和常数
int flag = 0, num = 0;
//等式左边
for (String s : arrLeft) {
if (s.equals("x")) {
flag += 1;
} else if (s.equals("-x")) {
flag -= 1;
} else if (s.contains("x")) {
flag += Integer.parseInt(s.substring(0, s.length() - 1));
} else if (!s.equals("")) {
num -= Integer.parseInt(s);
}
}
//等式右边
for (String s : arrRight) {
if (s.equals("x")) {
flag -= 1;
} else if (s.equals("-x")) {
flag += 1;
} else if (s.contains("x")) {
flag -= Integer.parseInt(s.substring(0, s.length() - 1));
} else if (!s.equals("")) {
num += Integer.parseInt(s);
}
}
if (flag == 0) {
if (num == 0) return "Infinite solutions";
else return "No solution";
} else {
return "x=" + num / flag;
}
}
}