通过万岁!!!
- 题目:给你一个字符串,里面是一些分数的加减,然后让你计算出结果来。
- 思路:遍历他,然后统计出分子和分母来。将分母的最小公倍数找到,计算出分子的结果,然后两者进行约分,然后输出即可。
- 技巧:数组的遍历,最小公倍数
java代码
class Solution {
public String fractionAddition(String expression) {
int len = expression.length();
if (len <= 0) {
return "";
}
int symbolNum = 0;
List numList = new ArrayList<>();
int num;
for (int i = 0; i < len; i++) {
switch (expression.charAt(i)) {
case '/':
++symbolNum;
break;
case '+':
num = expression.charAt(++i) - 48;
++i;
while (i < len && Character.isDigit(expression.charAt(i))) {
num = num * 10 + expression.charAt(i) - 48;
i++;
}
i--;
numList.add(num);
break;
case '-':
num = -1 * (expression.charAt(++i) - 48);
++i;
while (i < len && Character.isDigit(expression.charAt(i))) {
num = num * 10 + expression.charAt(i) - 48;
i++;
}
i--;
numList.add(num);
break;
default:
num = expression.charAt(i++) - 48;
while (i < len && Character.isDigit(expression.charAt(i))) {
num = num * 10 + expression.charAt(i) - 48;
i++;
}
i--;
numList.add(num);
}
}
List mul = new ArrayList<>();
int denominator = getMinMultiCommonMultiple(numList);// 分母
int molecule = 0;
for (int i = 0; i < numList.size() / 2; i++) {
molecule += denominator / numList.get(2 * i + 1) * numList.get(2 * i);
}
if (molecule == 0) {
return "0/1";
}
long g = getMaxCommonDivisor(Math.abs(denominator), molecule); // 获取最大公约数
if (denominator < 0 || g < 0) {
g *= -1;
}
return Long.toString(molecule / g) + "/" + Long.toString(denominator / g);
}
//先求两个数的最大公约数(使用辗转相除法)
public static int getMaxCommonDivisor(int a, int b) {
//定义一个交换站值
int temp = 0;
while (a % b != 0) {
temp = a % b;
a = b;
b = temp;
}
return b;
}
//求两个数的最小公倍数(两个数相乘 等于 这两个数的最大公约数和最小公倍数的 积)
public static int getMinCommonMultiple(int a, int b) {
return a * b / getMaxCommonDivisor(a, b);
}
//求多个数的最小公倍数
public static int getMinMultiCommonMultiple(List arrays) {
int val = arrays.get(1);
//实现原理:拿前两个数的最小公约数和后一个数比较,求他们的公约数以此来推。。。
for (int i = 1; i < arrays.size() / 2; i++) {
val = getMinCommonMultiple(val, arrays.get(2 * i + 1));
}
return val;
}
}
- 总结:题目不是特别难,就是比较复杂,然后里面涉及一些方法,例如对多个数求最小公倍数等。



