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. mysql-in关键字,分组查询,分页查询

    1. in关键字,组查询 # 使用or来查询的化,不方便而且参数一多比较傻 select * from users where id=1 or id=2 or id=4; select * from ...

  2. js数组排序sort()方法

    一.sort方法升序: <script> var arr=[1,15,10,3,56]; arr.sort(function(num1,num2){ return num1-num2; } ...

  3. 014对象——对象 __isset __unset __sleep __wakeup

    <?php /** * */ /*class lantian { public $name; public $age; private $money; public $c; function _ ...

  4. Fiddler工作原理与代理设置

    1,什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的 ...

  5. Python探索记(16)——Python的可变类型与不可变类型

    # @Time : 2017/7/8 17:49 # @Author : 原创作者:谷哥的小弟 # @Site : 博客地址:http://blog.csdn.net/lfdfhl # @DESC : ...

  6. POSIX线程同步

    在posix编程中,如果在不同的线程中几乎同一时间操作同一个变量的时候,就会出现不同步. 如何解决这样的问题,这里需要用到互斥量,互斥锁的概念.请看UNIX环境高级编程P299页 #include & ...

  7. for-in 的坑

    for-in 循环的下标为字符串,不是数字 var ar=[13,2,13,14]; function isSort(ar){ for(var i in ar){ console.log(i+':'+ ...

  8. Python 安装 pip package

    Python的 package 站点提供的msi安装越来越少了,如今大多是.whl或.tar.gz格式.对某些用windows的小白(比如,我)来说,对.tar.gz闻所未闻,也纠结了很长时间.whl ...

  9. poj 1159 最长回文

    方法  LCS #include<iostream> #include<cstring> #include<algorithm> #include<stdio ...

  10. Shell编程(二)——shell的基础知识及常用命令

    shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?​匹配一个字符 5 输入输出重定向 ...