题目

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

题解

这题既简单又麻烦,一道 hard 的 easy 题,被划分在了 medium…

说白了就是把分数相加,注意最后要约分。
剩下的都是细节了,直接看代码吧。

class Frac {int a; // 分子int b; // 分母public Frac(int a, int b) {this.a = a;this.b = b;}
}class Solution {public String fractionAddition(String exp) {if (exp.charAt(0) != '-') exp = "+" + exp;Frac frac = null;int[] arr = new int[3]; // arr[0]分子,arr[1]分母,arr[2]符号int pos = 0;for (int i = 0; i < exp.length(); i++) {if (exp.charAt(i) == '/') {pos = 1;} else if (exp.charAt(i) == '+' || exp.charAt(i) == '-') {// 清算上一个数if (frac != null) frac = add(frac, new Frac(arr[2] * arr[0], arr[1]));else if (i > 0) frac = new Frac(arr[2] * arr[0], arr[1]);// 初始化下一个数Arrays.fill(arr, 0);pos = 0;arr[2] = exp.charAt(i) == '-' ? -1 : 1;} else {arr[pos] *= 10;arr[pos] += (exp.charAt(i) - '0');}}// 清算末尾if (frac != null) frac = add(frac, new Frac(arr[2] * arr[0], arr[1]));else frac = new Frac(arr[2] * arr[0], arr[1]);return frac.a + "/" + frac.b;}public Frac add(Frac n1, Frac n2) {// 通分&求和int b = lcm(n1.b, n2.b); // 新分母int a = n1.a * (b / n1.b) + n2.a * (b / n2.b); // 新分子// 约分int gcd = Math.abs(gcd(a, b));a /= gcd;b /= gcd;return new Frac(a, b);}// 最大公因数static int gcd(int a, int b) {if (a == 0) return b;return gcd(b % a, a);}// 最小公倍数static int lcm(int a, int b) {return (a / gcd(a, b)) * b;}
}

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

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

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

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

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

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

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

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

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

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

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

  6. JAVA程序设计:分数加减运算(LeetCode:592)

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

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

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

  8. LeetCode中等题之分数加减运算

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

  9. leetcode_592. 分数加减运算

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

最新文章

  1. 网民网上购物决策时间延长
  2. 消息队列 RabbitMQ
  3. 一些关于流量和带宽的知识
  4. 关于站库分离渗透思考总结
  5. 聊聊Spring Cloud版本的那些事儿
  6. oracle12C推SCN,Oracle 的 DBMS_SCN 修正以及SCN的auto-rollover新特性
  7. js获取浏览器内核版本信息
  8. premiere(Pr)为视频配字幕 开放式字幕使用详解
  9. ERROR: Library projects cannot set applicationId. applicationId is set to 'com.example.baiduditu' in
  10. C语言中运算符优先级记忆方法
  11. CodeForces 581A Vasya the Hipster
  12. Vue2项目使用mars3d
  13. Java面向对象学习:遥控器
  14. 任正非:不惑之年创立华为是生活所迫,CEO真不是人干的活
  15. 超详细的编码实战,让你的springboot应用识别图片中的行人、汽车、狗子、喵星人(JavaCV+YOLO4)
  16. mysql 消息队列_一个简单的 MySQL 批量事务消息队列
  17. 强化学习入门及其实现代码
  18. css 水平居中和垂直居中
  19. 第十三课 斗地主项目课③游戏音乐与音效及本地存储
  20. 魔板 (BFS-HASH)题解

热门文章

  1. 国产浏览器 linux,360安全浏览器推出国产操作系统版,在deepin上架获得高度点赞...
  2. 大数开方(C++版)
  3. [luogu2042] [NOI2005]维护数列
  4. 9.IDA-重新设置函数类型、创建数组结构
  5. OSI 网络协议模型为什么是 7 层?
  6. 你已经用上 5G 网络了吗?
  7. Redis 缓存常见问题:缓存一致性的解决方案
  8. Python中装饰器的理解和实现
  9. 我对架构设计的5点思考:网关、业务逻辑、数据访问
  10. k8s 为何成为大厂标配?