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 ...
随机推荐
- 最新Mysql5.7安装教程
可以从MSQL官网下载MySQL服务器安装软件包,我下载为版本“mysql-installer-community-5.7.3.0-m13.msi”不多说 方法/步骤 1 双击进入安装,如下图: ...
- shell编程学习2
1.shell中调用linux命令(1)直接执行(2)反引号括起来执行.有时候我们在shell中调用linux命令是为了得到这个命令的返回值(结果值),这时候就适合用一对反引号(键盘上ESC按键下面的 ...
- 硬链接、软链接和inode
一.inode 在Linux中,“一切皆文件”. 唯一标识文件的是inode而非文件名,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 寻找正确的文件数据块. 什么是数据块呢?文件储存 ...
- .net学习路线(转)
入门篇1. 学习面向对象(OOP)的编程思想 许多高级语言都是面向对象的编程,.NET也不例外.如果您第一次接触面向对象的编程,就必须理解类.对象.字段.属性.方法和事件.封装.继承和 ...
- RESTful api 与 Django的 restfulframework
RESTful api 与 Django的 restfulframework 1 restful api 的基本概念 一类的资源使用一个url,不同的操作通过 请求方式处理 api -- >&g ...
- QWidget类参考
QWidget类是所有用户界面对象的基类. 详情请见…… #include <qwidget.h> 继承QObject和QPaintDevice. 被QButton.QFrame.QDia ...
- Celery分布式应用
最近有应用需要部署到不同的服务器上运行,但是有没有PBS这样的调度系统,就想起来Python的调度神器 Celery.现在针对我的实际应用做一些记录. 1. 安装 因为我并不注重结果而是把命令拿到不同 ...
- Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)
不要心急,一点一点的进步才是最靠谱的. 读完本文你将了解: 前言 Message 如何获取一个消息 Messageobtain 消息的回收利用 MessageQueue MessageQueue 的属 ...
- jQuery学习_具备吸附功能的拖曳框
在线演示:http://sandbox.runjs.cn/show/2drrwkrx 关键点:保持一个不变,鼠标拖动时与边框的距离 === 鼠标左击时与边框的距离 源码: <!DOCTYPE h ...
- Java Web 高性能开发,前端的高性能
Java Web 高性能开发,第 2 部分: 前端的高性能 Web 发展的速度让许多人叹为观止,层出不穷的组件.技术,只需要合理的组合.恰当的设置,就可以让 Web 程序性能不断飞跃.Web 的思想是 ...