Fraction Addition and Subtraction LeetCode solution in Java

1
class Solution {
2
// Great Common Divisor
3
private int gcd(int a, int b) {
4
int r = b % a;
5
if (r == 0) return a;
6
return gcd(r, a);
7
}
8

9
private int[] add(int[] a, int[] b) {
10
if (a[0] == 0) return b;
11
if (b[0] == 0) return a;
12
int[] ret = new int[] {a[0] * b[1] + b[0] * a[1], a[1] * b[1]};
13
if (ret[0] == 0) {
14
ret[1] = 1;
15
return ret;
16
}
17
int sign = ret[0] < 0 ? -1 : 1;
18
ret[0] *= sign;
19
int g = gcd(Math.min(ret[0], ret[1]), Math.max(ret[0], ret[1]));
20
if (g > 1) {
21
ret[0] /= g;
22
ret[1] /= g;
23
}
24
ret[0] *= sign;
25
return ret;
26
}
27

28
public String fractionAddition(String expression) {
29
return Stream.of(expression.replaceAll("\\-", "+-").split("\\+"))
30
.filter(s -> s.length() > 0)
31
.map(s -> s.split("/"))
32
.map(a -> new int[] {Integer.parseInt(a[0]), Integer.parseInt(a[1])})
33
.reduce((a, b) -> add(a, b))
34
.map(p -> p[0] + "/" + p[1])
35
.get();
36
}
37
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0