public class Solution {
private int GCD(int a, int b)
{
return b != ? GCD(b, a % b) : a;
} private int LCM(int a, int b)
{
return a * b / GCD(a, b);
} public string FractionAddition(string expression)
{
var first = expression[];
var FU = true;//默认当前表达式为负
if (first != '-')
{
FU = false;//当前表达式为正
}
var listPOS = new List<string>();//记录正表达式
var listNev = new List<string>();//记录负表达式
//先将正表达式和负表达式分开 var sb = new StringBuilder();//记录当前表达式 for (int i = ; i < expression.Length; i++)
{
if (expression[i] == '-')
{
if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
}
FU = true;
sb.Clear();
}
else if (expression[i] == '+')
{
if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
}
FU = false;
sb.Clear();
}
else
{
sb.Append(expression[i]);
}
} if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
} var listPOSSP = new List<List<int>>();
foreach (var str in listPOS)
{
var ary = str.Split('/');
var tp = new List<int>();
tp.Add(int.Parse(ary[]));
tp.Add(int.Parse(ary[]));
listPOSSP.Add(tp);
} var listNEVSP = new List<List<int>>();
foreach (var str in listNev)
{
var ary = str.Split('/');
var tp = new List<int>();
tp.Add(int.Parse(ary[]));
tp.Add(int.Parse(ary[]));
listNEVSP.Add(tp);
} var lcm1 = ;
var sumPOS = ;
if (listPOSSP.Any())
{
if (listPOSSP.Count == )
{
lcm1 = listPOSSP[][];
}
else
{
lcm1 = listPOSSP[][];
for (int i = ; i < listPOSSP.Count; i++)
{
var curFM = listPOSSP[i][];
lcm1 = LCM(lcm1, curFM);
}
} for (int i = ; i < listPOSSP.Count; i++)
{
var FM = listPOSSP[i][];
var FZ = listPOSSP[i][];
var bs = lcm1 / FM;
FZ = FZ * bs;
sumPOS += FZ;
}
} var lcm2 = ;
var sumNEV = ;
if (listNEVSP.Any())
{
if (listNEVSP.Count == )
{
lcm2 = listNEVSP[][];
}
else
{
lcm2 = listNEVSP[][];
for (int i = ; i < listNEVSP.Count; i++)
{
var curFM = listNEVSP[i][];
lcm2 = LCM(lcm2, curFM);
}
} for (int i = ; i < listNEVSP.Count; i++)
{
var FM = listNEVSP[i][];
var FZ = listNEVSP[i][];
var bs = lcm2 / FM;
FZ = FZ * bs;
sumNEV += FZ;
}
} var lcm = LCM(lcm1, lcm2);
var bs1 = lcm / lcm1;
var bs2 = lcm / lcm2;
var fz1 = sumPOS * bs1;
var fz2 = sumNEV * bs2;
var fz = fz1 - fz2; var cc = GCD(fz, lcm);
if (cc < )
{
cc = cc * -;
}
var result = fz / cc + "/" + lcm / cc; return result;
}
}

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

leetcode592的更多相关文章

  1. [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

随机推荐

  1. 下载并安装Prism5.0库(纯汉语版)

    Prism5.0中包含了文档,WPF代码示例,程序集.本篇告诉你从哪里获取程序集和代码示例,还有NuGet包的内容. 对于新功能,资产,和API的更改信息,请看Prism5.0新内容. 文档 Pris ...

  2. button出现投影

    style="?android:attr/borderlessButtonStyle" xml中加上这属性

  3. Struts06---通配符的使用

    01.创建对应的login.jsp页面 <%@ page language="java" import="java.util.*" pageEncodin ...

  4. LeetCode OJ:Majority Element(主要元素)

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  5. MySQL学习笔记2018-02-07更新

    前言:本人wechat:YWNlODAyMzU5MTEzMTQ=. 如果内容有错,请指出来. win10下安装 https://dev.mysql.com/downloads/mysql/下载并解压m ...

  6. 初识Linux(四)--系统常用命令

    这里记录一下基础的系统常用命令,都是日常可能用到的,需要记住的一些命令.主要分为5个模块:关于时间,输出/查看,关机/重启,压缩归档和查找. 时间:      date :查看设置当前系统时间,dat ...

  7. Ubuntu語言支持爲灰色修復方法

    Ubuntu語言支持爲灰色修復方法 在Ubuntu12.04中,在下不知爲何將 語言支持 中 應用到整個系統 和 添加語言 這2個按弄成了灰色,導致ibus不能輸入中文,現在唔將修復方法公告天下: 1 ...

  8. Jedis操作Redis技巧详解

    对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...

  9. 解决cookies取值中文乱码问题

    存入cookie 取出cookie 分别需要编码和解码, 注:要统一

  10. noip济南清北冲刺班DAY2

    题解: 贪心+dp 30% N<=5  5!枚举一下 20%  高度没有的时候,高度花费就不存在了,将ci排序, 从小到大挨个跳.另外,20% 准备跳楼没有花费,那么跳 楼的高度一定是从小到大, ...