算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 分数加减运算,我们先来看题面:

https://leetcode-cn.com/problems/fraction-addition-and-subtraction/

Given a string expression representing an expression of fraction addition and subtraction, return the calculation result in string format.

The final result should be an irreducible fraction. If your final result is an integer, change it to the format of a fraction that has a denominator 1. So in this case, 2 should be converted to 2/1.

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

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

示例

示例 1:
输入: expression = "-1/2+1/2"
输出: "0/1"示例 2:
输入: expression = "-1/2+1/2+1/3"
输出: "1/3"示例 3:
输入: expression = "1/3-1/2"
输出: "-1/6"

解题

因为是分数相加,为了便于编写和理解我抽象出了Number表示分数,并实现了分数相加的add方法(通分+分子相加)。

通分要利用到求最小公倍数,约分要用到求最大公因数。

之后就是字符串切割,切出每个带符号的分数,相加即可。

class Solution {class Number {//分子public int numerator;//分母public int dinominator;Number(int numerator, int dinominator){this.numerator = numerator;this.dinominator = dinominator;}public void add(Number number) {int tmpD = getMinMultiple(this.dinominator, number.dinominator);int tmpN = this.numerator * tmpD / this.dinominator + number.numerator * tmpD / number.dinominator;this.numerator = tmpN;this.dinominator = tmpD;}}public String fractionAddition(String expression) {List<Number> list = new LinkedList<>();int pre = 0;for(int i = 0; i < expression.length(); i++) {if(i != 0 && (expression.charAt(i) == '+' || expression.charAt(i) == '-')) {list.add(stringToNumber(expression.substring(pre, i)));pre = i;}}list.add(stringToNumber(expression.substring(pre, expression.length())));Number number = new Number(0, 1);for(Number n : list) {number.add(n);}int gcd = gcd(number.numerator, number.dinominator);number.numerator = number.numerator / gcd;number.dinominator = number.dinominator / gcd;if(number.dinominator < 0) {number.numerator *= -1;number.dinominator *= -1;}return number.numerator + "/" + number.dinominator;}//字符串转换为分数public Number stringToNumber(String expression) {String[] strs = expression.split("/");return new Number(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]));}//求最大公因数public int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b , a % b);}}//求最小公倍数public int getMinMultiple(int a, int b) {return a * b / gcd(a, b);}}作者:suspectX
链接:https://leetcode-cn.com/problems/fraction-addition-and-subtraction/solution/java-by-suspectx/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上期推文:

LeetCode1-580题汇总,希望对你有点帮助!

LeetCode刷题实战581:最短无序连续子数组

LeetCode刷题实战582:杀掉进程

LeetCode刷题实战583:两个字符串的删除操作

LeetCode刷题实战584:寻找用户推荐人

LeetCode刷题实战585:2016年的投资

LeetCode刷题实战586:订单最多的客户

LeetCode刷题实战587:安装栅栏

LeetCode刷题实战588:设计内存文件系统

LeetCode刷题实战589:N 叉树的前序遍历

LeetCode刷题实战590:N 叉树的后序遍历

LeetCode刷题实战591:标签验证器

​LeetCode刷题实战592:分数加减运算相关推荐

  1. Leetcode 592. 分数加减运算 C++

    Leetcode 592. 分数加减运算 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 ...

  2. 592.分数加减运算 纯纯的数学题,Python 7行代码+详细思路分享!

    592.分数加减运算 https://leetcode.cn/problems/fraction-addition-and-subtraction/solution/by-qingfengpython ...

  3. LeetCode 592. 分数加减运算(字符串+最大公约数)

    1. 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...

  4. 图解LeetCode——592. 分数加减运算(难度:中等)

    一.题目 给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即:最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成 ...

  5. 【leetcode】592.分数加减运算(python)

    目录 一.题目描述 二.解题思路 2.1 查找 '/' 所在位置(第一思路) 2.2 利用python中分数表达Fraction函数 2.2.1 Fraction函数介绍 2.2.2 解题 2.3 类 ...

  6. leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)

    题目 https://leetcode.com/problems/fraction-addition-and-subtraction/ 题解 这题既简单又麻烦,一道 hard 的 easy 题,被划分 ...

  7. LeetCode 0592. 分数加减运算:手把手分步のC++讲解

    [LetMeFly]592.分数加减运算:手把手分步のC++讲解 力扣题目链接:https://leetcode.cn/problems/fraction-addition-and-subtracti ...

  8. ​LeetCode刷题实战69:x 的平方根

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战70:爬楼梯

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  10. ​LeetCode刷题实战81:搜索旋转排序数组 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. COCO KeyPoints关键点数据集准备
  2. 从oracle中读取图片,Pb从oracle中读取和保存图片
  3. 制作灵动单片机MM32F3277 测试版
  4. 使用fiddler进行app弱网测试
  5. 利用JOrgChart只需2分钟即可配置简单组织机构图
  6. 雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果
  7. Python random 模块 - Python零基础入门教程
  8. [BZOJ1815BZOJ1488]有色图/图的同构(Polya定理)
  9. C#调用TSC打印机打印数据
  10. tracert和traceroute区别在哪?
  11. cad导入图片之间相互转换
  12. Python-温度转换
  13. postman--常用公共函数
  14. 在 vi 编辑器中的命令模式下,删除当前光标处的字符使用 __ 命 令。
  15. asp.net Repeater等数据控件模版内部2个DropDownList控件级联
  16. 【笔记】——MySQL数据库——基础知识-——快速回顾——(加深印象篇)
  17. linux搭建本地YUM源配置详细步骤
  18. 张岩 重庆大学 计算机学院,【学院之星】第二期
  19. 南京农业大学教务系统大学生抢课——基于python的selenium包+谷歌浏览器
  20. 从零开始的linux 第十二章

热门文章

  1. ucserver admin.php,Discuz!X3.2 升级后ucenter、uc_server正确密码却无法登录后台的解决方法...
  2. 维吉尼亚密码原理详解及算法实现
  3. EAUML日拱一卒-活动图::活动分区
  4. 爬虫抓取暗黑3玩家数据
  5. 16行,使用Python制作简易版QQ自动回复机器人(windows版)
  6. Arxiv 2206 | Global Context Vision Transformers
  7. 常见的导数公式和积分公式
  8. 哔哩哔哩mac客户端!亲测!支持big sur系统
  9. 有没有可以干一辈子的工作?
  10. 做人10大心机:不能太单纯 适度伪装自己