力扣592(java)-分数加减运算(中等)
题目:
给定一个表示分数加减运算的字符串 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"
提示:
输入和输出字符串只包含 '0' 到 '9' 的数字,以及 '/', '+' 和 '-'。
输入和输出分数格式均为 ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 '+' 会被省略掉。
输入只包含合法的最简分数,每个分数的分子与分母的范围是 [1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
输入的分数个数范围是 [1,10]。
最终结果的分子与分母保证是 32 位整数范围内的有效整数。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fraction-addition-and-subtraction
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
模拟计算过程:
先对两个分数通分,计算出他们的运算结果后,再进行分数化简,再与下一个分数进行通分运算,再进行分数化简...如此重复,直到算出最后的结果。
代码:
1 class Solution {
2 public String fractionAddition(String expression) {
3 List<Character> sign = new ArrayList<>();
4 //第一个如果是正数就需要先加入"+"
5 if(expression.charAt(0) != '-'){
6 sign.add('+');
7 }
8 //遍历数组,将加减号放在字符数组中
9 for(int i = 0; i < expression.length(); i++){
10 if(expression.charAt(i) == '+' || expression.charAt(i) == '-')
11 sign.add(expression.charAt(i));
12 }
13 //给分子分母设定初始值:0/1
14 int i = 0,pre_nums1 = 0, pre_nums2 = 1;
15 for(String s: expression.split("(\\+)|(-)")){
16 if(s.length() > 0){
17 //以除号作为分割符分割成两个数
18 String[] fraction = s.split("/");
19 int nums1 = (Integer.parseInt(fraction[0]));
20 int nums2 = (Integer.parseInt(fraction[1]));
21 //求两个分母的最大公约数
22 int g = Math.abs(gcd(nums2, pre_nums2));
23 if(sign.get(i++) == '+')
24 pre_nums1 = pre_nums1*nums2/g + nums1*pre_nums2/g;
25 else
26 pre_nums1 = pre_nums1*nums2/g - nums1*pre_nums2/g;
27 pre_nums2= nums2*pre_nums2/g;
28 //更新最大公约数
29 g = Math.abs(gcd(pre_nums2, pre_nums1));
30 //化简分子分母
31 pre_nums1 /= g;
32 pre_nums2 /= g;
33 }
34 }
35 return pre_nums1 + "/" + pre_nums2;
36 }
37 public int gcd(int a, int b){
38 while(b != 0) {
39 int t = b;
40 b = a % b;
41 a = t;
42 }
43 return a;
44 }
45 }
力扣592(java)-分数加减运算(中等)的更多相关文章
- Java实现 LeetCode 592 分数加减运算(纯体力活)
592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...
- Leetcode 592.分数加减运算
分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分 ...
- [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction
Given a string representing an expression of fraction addition and subtraction, you need to return t ...
- JAVA日期加减运算
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- velocity加减运算注意格式 ,加减号的左右都要有空格
velocity加减运算注意格式 ,加减号的左右都要有空格 #set( $left= $!biz.value - $vMUtils.getReturnMoney($!biz.billBuy) )
- C语言中指针变量的加减运算
1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址.指针变量可以加减,但是只能与整型数 ...
- 大整数加减运算的C语言实现
目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...
- Linux中日期的加减运算
Linux中日期的加减运算 目录 在显示方面 在设定时间方面 时间的加减 正文 date命令本身提供了日期的加减运算. date 可以用来显示或设定系统的日期与时间. 回到顶部 在显示方面 使用者可以 ...
- void *指针的加减运算
1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...
- C语言中指针的加减运算
参考文章,值得一看 char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; ...
随机推荐
- [win10] 开始-设置 / 右键-显示设置 / 右键个性化 等都不好使了。。 ms-settings:display
现象: 各种win10自带的都打不开了. 发现: 最近总是断网,重启下就好了,然后点击网络,就一直出不来.后来发现所有win10的窗口都出不来了.控制面板等等. 解决:好消息是最后解决了.坏消息是没有 ...
- linux 系统目录详解
tmpfs 的优势: 1,动态文件系统的大小. 2,tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的. 3,tmpfs 数 ...
- (二)Linux环境的学习环境的搭建
Xshell的安装和连接 由于我们打算通过Xshell进行命令的输入,就不再进行VMWARE-TOOLS的安装. 我们直接进行安装Xshell 并开始连接我们创建的创建的虚拟机 我们可以通过Xshel ...
- 记录--你还在傻傻的npm run serve吗?快来尝尝这个!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 大家在日常开发中应该经常会有需要切换不同环境地址的情况.当一个项目代码切换环境地址时,vue-cli没有能够感知文件的变化,所以代理 ...
- Tableau 绘制圆环图
一.对应数据如下所示 二.打开tableau连接对应Excel数据源,将记录数字段连续拖动两次到行,显示设置按整个视图显示,标记里面设置按饼图显示 三.设置两个值按度量值平均值显示,并调整第一个图稍微 ...
- Shiro反序列化分析
前言 Shiro,一个流行的web框架,养活了一大批web狗,现在来对它分析分析.Shiro的gadget是CB链,其实是CC4改过来的,因为Shiro框架是自带Commoncollections的, ...
- Postman模拟向Eureka注册服务
1.官方地址:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations 2.自己搭建一个 Eureka服务运行起来. 3.打开Post ...
- C#(winform)自定义ListItem类方便ComboBox操作
public class ListItem { /// <summary> /// Key /// </summary> public string Key { get; se ...
- cadence板图设计基本操作
基于cadence的四位全加器设计及仿真. 1.实验原理 板图,也就是芯片的原理图.通过学习板图的绘制,可以有效地提高对芯片的工作原理的认识.在版图设计中,需要掌握许多的规则,能够按照特定的规范优化, ...
- 考PMP证书总结
备考时间轴 大概时间安排如下,有点佩服自己报考时的勇气,万万没想工作项目的里程碑是12月4号,和考试日期12月5号如此接近 慧翔天地这个培训机构真心不看好,自己的感觉就是没有学到什么东西吧.主讲彭是给 ...