Skip to content

Commit a3c3e68

Browse files
refactor 592
1 parent 0c8eefc commit a3c3e68

File tree

2 files changed

+48
-43
lines changed

2 files changed

+48
-43
lines changed

src/main/java/com/fishercoder/solutions/_592.java

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -41,56 +41,61 @@ Each fraction (input and output) has format ±numerator/denominator.
4141
*/
4242
public class _592 {
4343

44-
/**Credit: https://discuss.leetcode.com/topic/89993/java-solution-fraction-addition-and-gcd*/
45-
public String fractionAddition(String expression) {
46-
List<String> nums = new ArrayList<>();
47-
int i = 0;
48-
int j = 0;
49-
while (j <= expression.length()) {
50-
if (j == expression.length() || j != i && (expression.charAt(j) == '-' || expression.charAt(j) == '+')) {
51-
if (expression.charAt(i) == '+') {
52-
nums.add(expression.substring(i + 1, j));
53-
} else {
54-
nums.add(expression.substring(i, j));
44+
public static class Solution1 {
45+
46+
/**
47+
* Credit: https://discuss.leetcode.com/topic/89993/java-solution-fraction-addition-and-gcd
48+
*/
49+
public String fractionAddition(String expression) {
50+
List<String> nums = new ArrayList<>();
51+
int i = 0;
52+
int j = 0;
53+
while (j <= expression.length()) {
54+
if (j == expression.length() || j != i && (expression.charAt(j) == '-' || expression.charAt(j) == '+')) {
55+
if (expression.charAt(i) == '+') {
56+
nums.add(expression.substring(i + 1, j));
57+
} else {
58+
nums.add(expression.substring(i, j));
59+
}
60+
i = j;
5561
}
56-
i = j;
62+
j++;
5763
}
58-
j++;
59-
}
6064

61-
String result = "0/1";
62-
for (String frac : nums) {
63-
result = add(result, frac);
65+
String result = "0/1";
66+
for (String frac : nums) {
67+
result = add(result, frac);
68+
}
69+
return result;
6470
}
65-
return result;
66-
}
6771

68-
private String add(String result, String frac) {
69-
String[] frac1 = frac.split("/");
70-
String[] frac2 = result.split("/");
71-
int n1 = Integer.parseInt(frac1[0]);
72-
int d1 = Integer.parseInt(frac1[1]);
73-
int n2 = Integer.parseInt(frac2[0]);
74-
int d2 = Integer.parseInt(frac2[1]);
75-
int numerator = n1 * d2 + n2 * d1;
76-
int denominator = d1 * d2;
77-
if (numerator == 0) {
78-
return "0/1";
79-
}
72+
private String add(String result, String frac) {
73+
String[] frac1 = frac.split("/");
74+
String[] frac2 = result.split("/");
75+
int n1 = Integer.parseInt(frac1[0]);
76+
int d1 = Integer.parseInt(frac1[1]);
77+
int n2 = Integer.parseInt(frac2[0]);
78+
int d2 = Integer.parseInt(frac2[1]);
79+
int numerator = n1 * d2 + n2 * d1;
80+
int denominator = d1 * d2;
81+
if (numerator == 0) {
82+
return "0/1";
83+
}
8084

81-
boolean negative = numerator * denominator < 0;
82-
numerator = Math.abs(numerator);
83-
denominator = Math.abs(denominator);
84-
int gcd = getGCD(numerator, denominator);
85+
boolean negative = numerator * denominator < 0;
86+
numerator = Math.abs(numerator);
87+
denominator = Math.abs(denominator);
88+
int gcd = getGCD(numerator, denominator);
8589

86-
return (negative ? "-" : "") + (numerator / gcd) + "/" + (denominator / gcd);
87-
}
90+
return (negative ? "-" : "") + (numerator / gcd) + "/" + (denominator / gcd);
91+
}
8892

89-
private int getGCD(int a, int b) {
90-
if (a == 0 || b == 0) {
91-
return a + b;
93+
private int getGCD(int a, int b) {
94+
if (a == 0 || b == 0) {
95+
return a + b;
96+
}
97+
return getGCD(b, a % b);
9298
}
93-
return getGCD(b, a % b);
9499
}
95100

96101
}

src/test/java/com/fishercoder/_592Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
* Created by fishercoder on 5/23/17.
1111
*/
1212
public class _592Test {
13-
private static _592 test;
13+
private static _592.Solution1 test;
1414
private static String expression;
1515

1616
@BeforeClass
1717
public static void setup() {
18-
test = new _592();
18+
test = new _592.Solution1();
1919
}
2020

2121
@Test

0 commit comments

Comments
 (0)