代码先放着,回去待会再来写思路,用了15ms,成绩不理想
public static String solveEquation(String equation) { String[] split = equation.split("="); int[] left = findPreNumSum(split[0]); int[] right = findPreNumSum(split[1]); if (left[0]==right[0]&&left[1]==right[1]) return "Infinite solutions"; else if (left[0]==right[0]&&left[1]!=right[1]){ return "No solution"; }else { return "x="+(right[1]-left[1])/(left[0]-right[0]); } } public static int[] findPreNumSum(String s){ int x_sum = 0; int integerSum = 0; int length = s.length(); for (int i = 0;i < length;i++){ char it = s.charAt(i); char pre = i>0?s.charAt(i-1):'n'; char next = i>length-2?'n':s.charAt(i+1); if(it=='+'||it=='-') continue; if (it == 'x'||it=='X'){ if (pre=='n'){ x_sum = x_sum + 1; }else { int count = 1; int sum = 0; int j; for (j = i-1;;){ if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){ if (i-j==1&&(s.charAt(j)=='+'||s.charAt(j)=='-')){ x_sum = x_sum + (s.charAt(j)=='+'?1:(-1)); System.out.println(x_sum); } count = 1; break; } sum = sum + (s.charAt(j)-'0')*count; count = count * 10; j--; } x_sum = x_sum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum; count = 1; sum = 0; } }else { if (('0'<=next&&next<='9')||next=='x') continue; int count = 1; int sum = 0; int j; for (j = i;;){ if(j<0||s.charAt(j)=='+'||s.charAt(j)=='-'){ count = 1; break; } sum = sum + (s.charAt(j)-'0')*count; count = count * 10; j--; } integerSum = integerSum + ((j==-1||s.charAt(j)=='+')?1:(-1))*sum; count = 1; sum = 0; } } System.out.println(x_sum+"-"+integerSum); return new int[]{x_sum,integerSum}; }