范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

LeetCode刷题实战592分数加减运算

  算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
  今天和大家聊的问题叫做 分数加减运算,我们先来看题面:
  https://leetcode-cn.com/problems/fraction-addition-and-subtraction/
  Given a string expression representing an expression of fraction addition and subtraction, return the calculation result in string format.
  The final result should be an irreducible fraction. If your final result is an integer, change it to the format of a fraction that has a denominator 1. So in this case, 2 should be converted to 2/1.
  给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。
  这个结果应该是不可约分的分数,即最简分数。如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。
  示例 示例 1:
  输入: expression = "-1/2+1/2"
  输出: "0/1"
  示例 2:
  输入: expression = "-1/2+1/2+1/3"
  输出: "1/3"
  示例 3:
  输入: expression = "1/3-1/2"
  输出: "-1/6"
  解题
  因为是分数相加,为了便于编写和理解我抽象出了Number表示分数,并实现了分数相加的add方法(通分+分子相加)。
  通分要利用到求最小公倍数,约分要用到求最大公因数。
  之后就是字符串切割,切出每个带符号的分数,相加即可。class Solution {
  class Number {
  //分子
  public int numerator;
  //分母
  public int dinominator;
  Number(int numerator, int dinominator){
  this.numerator = numerator;
  this.dinominator = dinominator;
  }
  public void add(Number number) {
  int tmpD = getMinMultiple(this.dinominator, number.dinominator);
  int tmpN = this.numerator * tmpD / this.dinominator + number.numerator * tmpD / number.dinominator;
  this.numerator = tmpN;
  this.dinominator = tmpD;
  }
  }
  public String fractionAddition(String expression) {
  List list = new LinkedList<>;
  int pre = 0;
  for(int i = 0; i < expression.length; i++) {
  if(i != 0 && (expression.charAt(i) == "+" || expression.charAt(i) == "-")) {
  list.add(stringToNumber(expression.substring(pre, i)));
  pre = i;
  }
  }
  list.add(stringToNumber(expression.substring(pre, expression.length)));
  Number number = new Number(0, 1);
  for(Number n : list) {
  number.add(n);
  }
  int gcd = gcd(number.numerator, number.dinominator);
  number.numerator = number.numerator / gcd;
  number.dinominator = number.dinominator / gcd;
  if(number.dinominator < 0) {
  number.numerator *= -1;
  number.dinominator *= -1;
  }
  return number.numerator + "/" + number.dinominator;
  }
  //字符串转换为分数
  public Number stringToNumber(String expression) {
  String strs = expression.split("/");
  return new Number(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]));
  }
  //求最大公因数
  public int gcd(int a, int b) {
  if (b == 0) {
  return a;
  } else {
  return gcd(b , a % b);
  }
  }
  //求最小公倍数
  public int getMinMultiple(int a, int b) {
  return a * b / gcd(a, b);
  }
  }
  作者:suspectX
  链接:https://leetcode-cn.com/problems/fraction-addition-and-subtraction/solution/java-by-suspectx/
  来源:力扣(LeetCode)
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  上期推文:
  LeetCode1-580题汇总,希望对你有点帮助!
  LeetCode刷题实战581:最短无序连续子数组
  LeetCode刷题实战582:杀掉进程
  LeetCode刷题实战583:两个字符串的删除操作
  LeetCode刷题实战584:寻找用户推荐人
  LeetCode刷题实战585:2016年的投资
  LeetCode刷题实战586:订单最多的客户
  LeetCode刷题实战587:安装栅栏
  LeetCode刷题实战588:设计内存文件系统
  LeetCode刷题实战589:N 叉树的前序遍历
  LeetCode刷题实战590:N 叉树的后序遍历
  LeetCode刷题实战591:标签验证器

再谈荣耀20Pro随手夜拍夜色很美,特别是盛夏的夜,在家里吹空调,不但浪费电还对身体不好,晚上出去走走,夏日夜晚的徐徐凉风就着美丽的夜晚景色和灯光搭配,惬意而且解暑,荣耀20Pro随手拈来一拍,留下些许美好超广角下的延时摄影体验荣耀20Pro超广角拍摄魅力拿到手机是前两天的事情,因为忙也没有时间测试,今天中午的雨,让工作稍有空闲,同时也带来了凉爽的天气和满天的云彩,光线交织中,感觉是拍摄延时摄影的好场景。想想已经有好久好久没有拍摄延开年第一弹,来点知识流媒体究竟是什么?在2019年期间,飞利浦先后推出了两款流媒体技术基础的行车记录仪,一款是CVR1500,一款则是在年尾上线的CVR1550,值得一提的是,CVR1550即便在整体的功能技术上和CV沉淀的2019,展翅的2020在2019年跨越到2020年之际,各行业大大小小的企业都忙碌着一边做2019年的年终总结以及2020年的发展规划,毕竟漫长的时间正因为有了划界点才能不断地引发新生的希望与期盼。根据2020收官在即京华ampampamp飞利浦智能甄选优品精彩盘点伴随圣诞铃声响起逐渐进入全新2021年倒计时时光荏苒,光阴如白驹过隙即便2020充满不易,但仍能有所庆幸的精彩诞生在迈向2021迎接全新开始之际请收下这份来自2020的甄选优品集飞让声音可听可触可读,飞利浦智能AI录音一体机实现信息多元化当我们的交流从物理空间迈进虚拟空间,当我们的消费形式从现金交易发展电子化交易,当我们记录生活的方式从简单的纸笔到丰富的数字化产品,当我们抵达目的的方式从行走到海陆空自由选择当我们的某程序员吐槽太尴尬!四年不见的前女友来面试,自己还是面试官分手四年的前女友,再见面却在公司的面试现场,更尴尬的自己还是她的面试官这么狗血的情节不是电视剧,而是发生在一个程序员身上的真实故事。楼主说,第一眼看到前女友感觉她变化挺大,开始自我何时整治程序员的高薪现象?最近,一个知乎问答引起了网友热议国家何时整治程序员的高薪现象?看到这个问题,相信大多数程序员都会火冒三丈,一位程序员的回答大概能代表许多人的心声这个问题就是典型的窃国者侯,窃钩者诛蚂蚁某程序员吐槽前端招人难一是因为要求高,二是因为招聘卷近日,一个蚂蚁员工发帖吐槽前端招人太难,引发网友热议。该员工觉得难的原因有以下两点一是因为要求高,主要体现在简历筛选上,大部分简历连初筛都过不了。但这同时说明他们招人不是为了刷kp蚂蚁某程序员吐槽前端招人难一是因为要求高,二是因为招聘卷近日,一个蚂蚁员工发帖吐槽前端招人太难,引发网友热议。该员工觉得难的原因有以下两点一是因为要求高,主要体现在简历筛选上,大部分简历连初筛都过不了。但这同时说明他们招人不是为了刷kp某程序员分享经验从字节跳到eBay,真香许多人都向往国内的互联网大厂,但也有许多人选择离开大厂到外企,享受一种更轻松的生活,这部分人的现状如何呢?近日,一个从字节跳槽到eBay的网友发帖分享了自己的感受并非因为绩效低从字
手机用满5年已是极限,当出现这4类情况,别犹豫该更新换代了一台手机的寿命是多久?其实很少人给出确切的答案,但我相信大家都希望自己买的大旗舰能顶用个三五年。各价位手机性能的区别也决定了它的寿命长度,如果出现以下四种现象任意一种,那么你该换手小屏旗舰依然可以期待,iPhonese3外观可能有惊喜说到小屏旗舰,目前市面上能够有所建树的还是iPhone12mini,虽然这样的产品依旧受到续航的干扰,但其销量还是有目共睹的。但即便如此,较高的价格依然将很多潜在的小屏旗舰爱好者拒FaceBook改名元宇宙深层原因2021年3月Roblox的上市让Metaverse元宇宙概念引爆市场,接近400亿美元的市值彻底打开了元宇宙行业的想象空间。Metaverse中,用户不再可以区分物理性的真是存在一加与小米手机使用感受mi10用了快两年了,运行速度还可以,就是电池不耐用了,趁着春节京东搞活动就想着换一个算了。可能是小米新型号上市,为了清库存吧,这次小米的旧机型活动力度很大,mi10s2299,m远古比喜马拉雅还要庞大的超级山脉曾经,数十亿年前,高度媲美喜马拉雅的山脉绵延数千公里,横跨合并超级大陆的接缝。就像衰老的牙齿一样,这些巨人现在已被时间和腐烂磨损到根部。但在那些风化的遗迹中,可能是关于这些古老超级远程协作好帮手,音质更清晰,戴尔Pro立体声耳机上手这几年随着远程办公成为日常,定时参加在线会议也成了很多人的必修课,在线上参会的时候,耳机麦克风的质量和网络的稳定性都很重要,起初很多朋友会用普通的蓝牙耳机或者外放,这样不仅音质很差颜值超高!倍思100W充电套装限时138元秒杀近期笔者发现一款颜值超高的充电套装,配色也是绝美的。这个充电套装就是倍思100W充电套装,现在还在做活动,限时138元秒杀,感兴趣的可以了解一下。读者朋友们看这颜值是不是很高,买回你认为中国人为什么如此迷恋手机?我们的生活和手机密不可分,离不开手机现在的手机,对很多正常人来讲,是不能缺少的,功能强大的随身工具,如此迷恋,是现代生活与手机息息相关。下面就根据我个人见解,在三个方面大概粗谈一下价格几乎一样,小米12对比IQOO9,你更好看哪一款?在国产手机中,如果你要入手一款中端偏上的产品,那么小米数字系列和IQOO系列绝对是绕不开的机型,它们一般都处在30004000的价位之间,而产品力表现却能够摸到顶级旗舰的尾巴,既有手机关机和重启有什么区别?维修手机老师傅告诉你学长身边很多朋友平常都是不会重启手机的,甚至不会关机,那么很多人就非常好奇手机到底是关机好,还是不关机好?学长特地去采访了一下数码店里维修手机的老师傅,得到大多数的回答就是不关机好火电厂还有未来吗?火电厂在很长一段时间内还会处于主力地位。虽然以风光为代表的新能源发展迅速,局部地区甚至装机容量和发电量超过了火力发电。但新能源的随机性,波动性,大规模电力电子化,电网友好性差等问题