leetcode592
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的更多相关文章
- [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction
Given a string representing an expression of fraction addition and subtraction, you need to return t ...
随机推荐
- 下载并安装Prism5.0库(纯汉语版)
Prism5.0中包含了文档,WPF代码示例,程序集.本篇告诉你从哪里获取程序集和代码示例,还有NuGet包的内容. 对于新功能,资产,和API的更改信息,请看Prism5.0新内容. 文档 Pris ...
- button出现投影
style="?android:attr/borderlessButtonStyle" xml中加上这属性
- Struts06---通配符的使用
01.创建对应的login.jsp页面 <%@ page language="java" import="java.util.*" pageEncodin ...
- LeetCode OJ:Majority Element(主要元素)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- MySQL学习笔记2018-02-07更新
前言:本人wechat:YWNlODAyMzU5MTEzMTQ=. 如果内容有错,请指出来. win10下安装 https://dev.mysql.com/downloads/mysql/下载并解压m ...
- 初识Linux(四)--系统常用命令
这里记录一下基础的系统常用命令,都是日常可能用到的,需要记住的一些命令.主要分为5个模块:关于时间,输出/查看,关机/重启,压缩归档和查找. 时间: date :查看设置当前系统时间,dat ...
- Ubuntu語言支持爲灰色修復方法
Ubuntu語言支持爲灰色修復方法 在Ubuntu12.04中,在下不知爲何將 語言支持 中 應用到整個系統 和 添加語言 這2個按弄成了灰色,導致ibus不能輸入中文,現在唔將修復方法公告天下: 1 ...
- Jedis操作Redis技巧详解
对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...
- 解决cookies取值中文乱码问题
存入cookie 取出cookie 分别需要编码和解码, 注:要统一
- noip济南清北冲刺班DAY2
题解: 贪心+dp 30% N<=5 5!枚举一下 20% 高度没有的时候,高度花费就不存在了,将ci排序, 从小到大挨个跳.另外,20% 准备跳楼没有花费,那么跳 楼的高度一定是从小到大, ...