leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
https://leetcode.com/problems/solve-the-equation/
題解
本題重點在字符串的處理。
先用 tokenize 函數,整理出每一項,用 X 表示,記錄每一項的系數以及是否含有變量x。
然后我們希望把整個式子化為 Ax=b 的形式。
最后,只要計算 x=b/A 即可。
tricks:為了方便處理首尾,我們定義了一個 format 函數,讓每一個數字前面都統一含有 + / - 號,每一個數字的后面也都統一含有 + / - 號。
class X {int c = 1; // 系數boolean x = false; // 是否含x }class Solution {public String solveEquation(String equation) {// tokenizeArrayList<X> tokens = new ArrayList<>();String left = format(equation.split("=")[0]);String right = format(equation.split("=")[1]);tokens.addAll(tokenize(left, 1));tokens.addAll(tokenize(right, -1));// calc coefficientint cx = 0;// x的系數int cc = 0;// c的系數for (X x : tokens) {if (x.x) cx += x.c;else cc += x.c;}// solveif (cc == 0 && cx == 0) return "Infinite solutions";else if (cx == 0) return "No solution";else return "x=" + (-cc / cx);}public String format(String s) {if (s.charAt(0) != '-' && s.charAt(0) != '+') s = "+" + s;return s + "+";}public List<X> tokenize(String exp, int turn) {int pre = 0;List<X> tokens = new ArrayList<>();for (int i = 1; i < exp.length(); i++) {if (exp.charAt(i) == '+' || exp.charAt(i) == '-') { // 結算(解析)上一項String s = exp.substring(pre, i);X x = new X();// 符號正負int sn;if (s.charAt(0) == '-') {sn = turn * (-1);} else {sn = turn;}s = s.substring(1);// 是否含xif (s.charAt(s.length() - 1) == 'x') {x.x = true;s = s.substring(0, s.length() - 1);}// 系數if (s.length() > 0) {x.c = sn * Integer.parseInt(s);} else {x.c = sn;}pre = i;tokens.add(x);}}return tokens;} }總結
以上是生活随笔為你收集整理的leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 1008. Const
- 下一篇: leetcode 622. Design