Skip to content

Instantly share code, notes, and snippets.

@wushbin
Created February 16, 2020 02:26
Show Gist options
  • Select an option

  • Save wushbin/b3931376bcb0bd01a8c9b8fd054863ca to your computer and use it in GitHub Desktop.

Select an option

Save wushbin/b3931376bcb0bd01a8c9b8fd054863ca to your computer and use it in GitHub Desktop.
class Solution {
public String solveEquation(String equation) {
String[] tokens = equation.split("=");
if (tokens.length != 2) {
return "No solution";
}
int[] left = parse(tokens[0]);
int[] right = parse(tokens[1]);
// move x to left, num to right
int x = left[1] - right[1];
int num = right[0] - left[0];
if (x == 0) {
if (num == 0) {
return "Infinite solutions";
} else {
return "No solution";
}
}
return "x=" + num/x;
}
private int[] parse(String s) {
// int[] -> {num, x}
int num = 0;
boolean seeNum = false;
int x = 0;
int val = 0;
int sign = 1;
int i = 0;
while(i < s.length()) {
if (Character.isDigit(s.charAt(i))) {
val = val * 10 + s.charAt(i) - '0';
seeNum = true;
} else if (s.charAt(i) == 'x') {
x += (val > 0 || seeNum ? sign * val : sign);
val = 0;
} else if (s.charAt(i) == '+') {
num += (sign * val);
val = 0;
sign = 1;
seeNum = false;
} else if (s.charAt(i) == '-') {
num += (sign * val);
val = 0;
sign = -1;
seeNum = false;
}
i++;
}
if (val > 0) {
num += (sign * val);
}
return new int[]{num, x};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment