每日一题 -- leetCode592

156 阅读2分钟

image.png 「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

前言

每日一题,轻松解题

每日一题为刷题系列 每日刷一题LeetCode题,并且对题目进行分析,分享思路。

正文

:分数加减运算

难度:中等

题目要求:

给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。 

这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。

分析题目:

就是给了一个分数的加减法的算式的字符串,要求把这个算式的结果算出来返回

举个例子

输入: expression = "-1/2+1/2"
输出: "0/1"

:解题

理清思路:

分析:
第一步先把字符划分成一个个分数,可以通过"+"或者"-"作为分隔遍历
在找每一个分数的同事,可以把每个分数的分子和分母找出来,通过"/"分隔
划分分数时,"+"或者"-"可以看成分子的一部分,这样每个分数都是+a/b或者-a/b的形式,更容易计算
最后对每一组分子和分母进行累加,累加时可以先直接相乘,然后约分

编辑代码:

1.

 /**
 * @param {string} expression
 * @return {string}
 */
  var fractionAddition = function(expression) {
    let n1 = 0;
    let n2 = 1;
    // 先找到每一个分数,累加分子和分母
    let idx = 0;
    while (expression[idx]) {
        // 先找分子
        let a1 = "";
        while (expression[idx] && expression[idx] !== "/") {
            a1 += expression[idx];
            idx++;
        }

        // 跳过除号
        idx++;

        // 在找分母累加
        let a2 = "";
        while (expression[idx] && expression[idx] !== "+"&& expression[idx] !== "-") {
            a2 += expression[idx];
            idx++;
        }

        // 累加分子
        n1 = n1 * a2 + a1 * n2;
        // 累加分母
        n2 = n2 * a2;

        //分子分母约去公因数
        let g=gcd(n1,n2);
        n1/=g;
        n2/=g;

        //去寻找下一个分数
    }

    return `${n1}/${n2}`
};
  • 第一个while是查找分子,把/左边的分子赋值给a1包括 + - 号
  • 第二个while是查找分母,把/右边的分母赋值给a2
  • 将分子和分母分别累加 -- 通分
  • 最后约去公因数

2.写个函数来约分分数

function gcd(a,b){
    if(b == 0){
        return a;
    }
    var r = Math.abs(a % b);
    return gcd(b,r);
}

总结

无论做什么分析最重要,其中我们分析了题目,分析了解题思路,其实在分析完解题思路后,代码其实就是很简单的事情了,养成习惯,无论做什么之前,都要进行分析,这样有助于你更快更好的完成这件事。