1. public class Solution {
  2. private int GCD(int a, int b)
  3. {
  4. return b != ? GCD(b, a % b) : a;
  5. }
  6.  
  7. private int LCM(int a, int b)
  8. {
  9. return a * b / GCD(a, b);
  10. }
  11.  
  12. public string FractionAddition(string expression)
  13. {
  14. var first = expression[];
  15. var FU = true;//默认当前表达式为负
  16. if (first != '-')
  17. {
  18. FU = false;//当前表达式为正
  19. }
  20. var listPOS = new List<string>();//记录正表达式
  21. var listNev = new List<string>();//记录负表达式
  22. //先将正表达式和负表达式分开
  23.  
  24. var sb = new StringBuilder();//记录当前表达式
  25.  
  26. for (int i = ; i < expression.Length; i++)
  27. {
  28. if (expression[i] == '-')
  29. {
  30. if (FU)
  31. {
  32. if (sb.Length > )
  33. {
  34. listNev.Add(sb.ToString());
  35. }
  36. }
  37. else
  38. {
  39. if (sb.Length > )
  40. {
  41. listPOS.Add(sb.ToString());
  42. }
  43. }
  44. FU = true;
  45. sb.Clear();
  46. }
  47. else if (expression[i] == '+')
  48. {
  49. if (FU)
  50. {
  51. if (sb.Length > )
  52. {
  53. listNev.Add(sb.ToString());
  54. }
  55. }
  56. else
  57. {
  58. if (sb.Length > )
  59. {
  60. listPOS.Add(sb.ToString());
  61. }
  62. }
  63. FU = false;
  64. sb.Clear();
  65. }
  66. else
  67. {
  68. sb.Append(expression[i]);
  69. }
  70. }
  71.  
  72. if (FU)
  73. {
  74. if (sb.Length > )
  75. {
  76. listNev.Add(sb.ToString());
  77. }
  78. }
  79. else
  80. {
  81. if (sb.Length > )
  82. {
  83. listPOS.Add(sb.ToString());
  84. }
  85. }
  86.  
  87. var listPOSSP = new List<List<int>>();
  88. foreach (var str in listPOS)
  89. {
  90. var ary = str.Split('/');
  91. var tp = new List<int>();
  92. tp.Add(int.Parse(ary[]));
  93. tp.Add(int.Parse(ary[]));
  94. listPOSSP.Add(tp);
  95. }
  96.  
  97. var listNEVSP = new List<List<int>>();
  98. foreach (var str in listNev)
  99. {
  100. var ary = str.Split('/');
  101. var tp = new List<int>();
  102. tp.Add(int.Parse(ary[]));
  103. tp.Add(int.Parse(ary[]));
  104. listNEVSP.Add(tp);
  105. }
  106.  
  107. var lcm1 = ;
  108. var sumPOS = ;
  109. if (listPOSSP.Any())
  110. {
  111. if (listPOSSP.Count == )
  112. {
  113. lcm1 = listPOSSP[][];
  114. }
  115. else
  116. {
  117. lcm1 = listPOSSP[][];
  118. for (int i = ; i < listPOSSP.Count; i++)
  119. {
  120. var curFM = listPOSSP[i][];
  121. lcm1 = LCM(lcm1, curFM);
  122. }
  123. }
  124.  
  125. for (int i = ; i < listPOSSP.Count; i++)
  126. {
  127. var FM = listPOSSP[i][];
  128. var FZ = listPOSSP[i][];
  129. var bs = lcm1 / FM;
  130. FZ = FZ * bs;
  131. sumPOS += FZ;
  132. }
  133. }
  134.  
  135. var lcm2 = ;
  136. var sumNEV = ;
  137. if (listNEVSP.Any())
  138. {
  139. if (listNEVSP.Count == )
  140. {
  141. lcm2 = listNEVSP[][];
  142. }
  143. else
  144. {
  145. lcm2 = listNEVSP[][];
  146. for (int i = ; i < listNEVSP.Count; i++)
  147. {
  148. var curFM = listNEVSP[i][];
  149. lcm2 = LCM(lcm2, curFM);
  150. }
  151. }
  152.  
  153. for (int i = ; i < listNEVSP.Count; i++)
  154. {
  155. var FM = listNEVSP[i][];
  156. var FZ = listNEVSP[i][];
  157. var bs = lcm2 / FM;
  158. FZ = FZ * bs;
  159. sumNEV += FZ;
  160. }
  161. }
  162.  
  163. var lcm = LCM(lcm1, lcm2);
  164. var bs1 = lcm / lcm1;
  165. var bs2 = lcm / lcm2;
  166. var fz1 = sumPOS * bs1;
  167. var fz2 = sumNEV * bs2;
  168. var fz = fz1 - fz2;
  169.  
  170. var cc = GCD(fz, lcm);
  171. if (cc < )
  172. {
  173. cc = cc * -;
  174. }
  175. var result = fz / cc + "/" + lcm / cc;
  176.  
  177. return result;
  178. }
  179. }

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-debug: Thread stack overrun

    bug info 报错信息: java.sql.SQLException: Thread stack overrun: 5456 bytes used of a 131072 byte stack, ...

  2. MongoDB 可视化管理工具 MongoCola-1.1.0 测试版发布

    首先,感谢大家对于本工具的支持. 经过一周的努力,最新版的工具测试版出炉了,这个版本是一个很重要的版本. 为什么说这个版本重要?以前的工具,只支持一个视图窗口,也就是说了,一次只能看一个数据集的数据. ...

  3. LeetCode OJ:Integer to Roman(转换整数到罗马字符)

    Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...

  4. Java丨简单的登录过滤器实现方法

    过滤过滤,实际就是把需要和不需要的东西分开! 今天来说道说道我们程序中的‘登录过滤器’ ,首先我们看看一下面的问题: 1.“登录过滤器”是干什么用的? 1)“登录过滤器”就是为了防止在用户没有登录的情 ...

  5. android 删除SD卡或者手机的缓存图片和目录

    public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg"; private static String ...

  6. 10.Linux网卡的配置及详解

    1.网卡配置文件在/etc/sysconfig/network-scripts/下: [root@oldboy network-scripts]# ls /etc/sysconfig/network- ...

  7. 哈工大同义词词林 python 使用范例

    哈工大的同义词词林,应该是上个世纪的产物,里面的词比较老旧,但好歹也能用 同义词词林的作用,跟word2vec的获取相近词函数比较类似,这两者发挥的功效比较,看具体的应用吧 1. 首先下载包含同义词的 ...

  8. (二)java环境搭建

    Java运行环境的搭建: 什么是JRE,什么是JDK? JRE:(java运行环境)包括jvm(java虚拟机)和java运行的核心类库,如果只是运行java程序,只需安装JRE JDK:(java开 ...

  9. (八)js函数二

    1.变量 a)局部变量:在所有函数内部定义的变量,或者在函数内部未使用var声明的变量也属于全局变量. b)全局变量:在所有函数外部定义的变量. eg: 1)     var a = 5,b = 4, ...

  10. 【MFC】断言(ASSERT)的用法

    摘自:Moondark  http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html 断言(ASSERT)的用法   我一直以为as ...