Loading

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;
    }
}
posted @ 2020-10-24 11:52  上海井盖王  阅读(144)  评论(0)    收藏  举报