题:https://leetcode.com/problems/fraction-addition-and-subtraction/
题目大意
全都看做加法,每个分数分为 分子分母两部相加,分子会有正负。
思路
class Solution {
public int getNum(String s){
int i = 0;
boolean isPositive = true;
if(s.charAt(i)=='-' || s.charAt(i) == '+'){
if(s.charAt(i)=='-')
isPositive = false;
i++;
}
int num = 0 ;
for(; i<s.length();i++)
num = num*10 + (s.charAt(i)-'0');
return isPositive?num:-num;
}
public int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
// public lcm(int a,int b){
// return a*b/gcd(a,b);
// }
public int[] fractionaddition(int a1,int a2,int b1,int b2){
if(a1 != 0 && b1 !=0){
int dgcd = gcd(a2,b2);
int nres = a1 * b2*dgcd + b1*a2*dgcd;
int dres = a2*b2*dgcd;
return new int[]{nres,dres};
}else if(a1 == 0){
return new int[]{b1,b2};
}else {
return new int[]{a1,a2};
}
}
public String fractionAddition(String expression) {
int numeratorRes = 0;
int denominatorRes = 1;
int i = 0 ;
int startindex =0;
while(i<expression.length()){
while(expression.charAt(i)!='/')
i++;
int tnumerator = getNum(expression.substring(startindex,i));
i++;
startindex = i;
while(i<expression.length() && expression.charAt(i)!='+' & expression.charAt(i) != '-')
i++;
int tdenominator = getNum(expression.substring(startindex,i));
startindex = i;
int[] tres = fractionaddition(numeratorRes,denominatorRes,tnumerator,tdenominator);
numeratorRes = tres[0];
denominatorRes = tres[1];
for(int j = 2 ; j <= denominatorRes;j++){
while(numeratorRes%j ==0 && denominatorRes%j==0){
numeratorRes/=j;
denominatorRes/=j;
}
}
}
return ""+numeratorRes+"/"+denominatorRes;
}
}
讨论中写的更好,主要是它解决了 字符匹配的问题。
https://leetcode.com/problems/fraction-addition-and-subtraction/discuss/?currentPage=1&orderBy=most_votes&query=