Leetcode 640. 求解方程
- 求解方程
求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x 是一个整数。
示例 1:
输入: “x+5-3+x=6+x-2”
输出: “x=2”
示例 2:
输入: “x=x”
输出: “Infinite solutions”
示例 3:
输入: “2x=x”
输出: “x=0”
示例 4:
输入: “2x+3x-6x=x+2”
输出: “x=-1”
示例 5:
输入: “x=x+2”
输出: “No solution”
class Solution {
public String solveEquation(String equation) {
//将字符串分两部分将- 替换为+-
String[] equations = equation.replace("-","+-").split("=");
//判断两部分的开头是否为-
boolean flag1 = false,flag2 = false;
if(equations[0].charAt(0) == '+') flag1 = true;
if(equations[1].charAt(0) == '+') flag2 = true;
//分割+
String[] left = equations[0].split("\\+");
String[] right = equations[1].split("\\+");
int xNum = 0;
int pNum = 0;
int i = 0;
if(flag1) i = 1;
for(;i < left.length;i++){
//如果字符串中有x的字符串并记录所有的剩下的x个数
if(left[i].contains("x")){
if(left[i].length() == 1){
xNum += 1;//如果为单个x则为1
}else if(left[i].length() == 2){
//判断x是否为 -
if(left[i].charAt(0) == '-'){
xNum -= 1;
}else{
xNum += Integer.valueOf(left[i].split("x")[0]);
}
}else{
xNum += Integer.valueOf(left[i].split("x")[0]);
}
}else if(left[i] != ""){
//记录常数
pNum -= Integer.valueOf(left[i]);
}
}
int j = 0;
if(flag2) j = 1;
for(;j < right.length;j++){
if(right[j].contains("x")){
if(right[j].length() == 1){
xNum -= 1;
}else if(right[j].length() == 2){
if(right[j].charAt(0) == '-'){
xNum += 1;
}else{
xNum -= Integer.valueOf(right[j].split("x")[0]);
}
}else{
xNum -= Integer.valueOf(right[j].split("x")[0]);
}
}else if(right[j] != ""){
pNum += Integer.valueOf(right[j]);
}
}
if(xNum == 0&&pNum == 0)return "Infinite solutions";
else if(xNum == 0&&pNum != 0)return "No solution";
else if(pNum == 0) return "x=" + 0;
else return "x=" + (pNum / xNum);
}
}
执行结果:
通过
显示详情
执行用时:4 ms, 在所有 Java 提交中击败了83.86% 的用户
内存消耗:37 MB, 在所有 Java 提交中击败了42.51% 的用户