「这是我参与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);
}
总结
无论做什么分析最重要,其中我们分析了题目,分析了解题思路,其实在分析完解题思路后,代码其实就是很简单的事情了,养成习惯,无论做什么之前,都要进行分析,这样有助于你更快更好的完成这件事。