592. [字符串]分数加减运算
592.分数加减运算
本题的关键点在于如何处理-,并且对于首位分数是否为负需要单独存储。由于最后我们需要对分数进行化简,这里我们手写GCD算法(辗转相除法)求出最大公约数,对分子分母进行化简后拼接字符串即可。
// 执行用时: 7 ms , 在所有 Java 提交中击败了 86.67% 的用户
// 内存消耗: 37.4 MB , 在所有 Java 提交中击败了 68.60% 的用户
class Solution {
public String fractionAddition(String expression) {
boolean fushuFlag = expression.charAt(0) == '-';
expression = expression.replace("-", "+-");
String[] splits = expression.split("\\+");
int[] fenzi = new int[splits.length];
int[] fenmu = new int[splits.length];
int sumfenmu = 1;
int i = 0;
if (fushuFlag) i = 1;
for (; i < splits.length; i++) {
fenzi[i] = Integer.parseInt(splits[i].split("/")[0]);
fenmu[i] = Integer.parseInt(splits[i].split("/")[1]);
sumfenmu *= fenmu[i];
}
int sum = 0;
i = 0;
if (fushuFlag) i = 1;
for (; i < splits.length; i++) {
sum += sumfenmu / fenmu[i] * fenzi[i];
}
int yueshu = this.GCD(sum, sumfenmu);
return sum / yueshu + "/" + sumfenmu / yueshu;
}
public int GCD(int m, int n) {
m = Math.abs(m);
n = Math.abs(n);
int result = 0;
while (n != 0) {
result = m % n;
m = n;
n = result;
}
return m;
}
}

浙公网安备 33010602011771号