[LeetCode]Fraction to Recurring Decimal
来源:互联网 发布:龙城霸业 boss积分数据 编辑:程序博客网 时间:2024/05/18 14:23
Question
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
If the fractional part is repeating, enclose the repeating part in parentheses.
For example,
- Given numerator = 1, denominator = 2, return “0.5”.
- Given numerator = 2, denominator = 1, return “2”.
- Given numerator = 2, denominator = 3, return “0.(6)”.
本题难度Medium。
【题意】
本题是给定分子和分母,将其转换为小数,如果是循环小数就对其循环部分用括号括起来。
哈希法
【复杂度】
时间 O(N) 空间 O(N)
【思路】
这道题有几个难点(部分在Hint里面有):
- 要记得对负数情况进行判断
- 分子可能会大于分母。因此就区分开来计算,先计算小数点前的,再计算小数点后的
- 对于循环小数的判断。采用哈希表来记录被除数和除得的结果在字符串中的位置;在除之前,如果被除数在哈希表中已经记录过,说明这部分为循环,因此用括号括起这部分。
- 还要考虑除数与被除数可能是
Integer.MIN_VALUE
,它们转换为正数会溢出,因此应该用long型变量储存。
【注意】
- 在判断除的结果为正负时,如果用
numerator/denominator<0
来判断,那么当numerator=7,denominator=-12
时,得到的结果为0
,会导致判断失误。所以使用了较为繁琐的判断:
(numerator>0&&denominator<0)||(numerator<0&&denominator>0)
- 对于除数为0这种非法情况,假定返回值为
"0"
【代码】
public class Solution { public String fractionToDecimal(int numerator, int denominator) { //require if(denominator==0)return "0"; StringBuilder sb=new StringBuilder(); Map<Long,Integer> map=new HashMap<>(); //正负数检测 if((numerator>0&&denominator<0)||(numerator<0&&denominator>0))sb.append("-"); long dividend=Math.abs((long)numerator),divisor=Math.abs((long)denominator); //invariant //计算小数点之前 sb.append(dividend/divisor); //计算小数点之后 dividend=dividend%divisor*10; if(dividend==0)return sb.toString(); else{ sb.append("."); while(dividend!=0){ //看是否有循环小数 if(map.containsKey(dividend)){ sb.insert(map.get(dividend),"("); sb.append(")"); break; } //记录该被除数的结果在sb的插入位置 map.put(dividend,sb.length()); sb.append(dividend/divisor); dividend=dividend%divisor*10; } } //ensure return sb.toString(); }}
0 0
- [leetcode] Fraction to Recurring Decimal
- LeetCode Fraction to Recurring Decimal
- Fraction to Recurring Decimal leetcode
- leetcode:Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [leetCode] Fraction to Recurring Decimal
- LeetCode:Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- leetcode:Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [leetcode]Fraction to Recurring Decimal
- LeetCode: Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- leetcode: Fraction to Recurring Decimal
- gitlab的用户使用手册
- 环境搭建之rabbitmq安装步骤(win64)
- 谈一谈
- hive内部表与外部表区别详细介绍
- JavaScript新窗体的打开与关闭
- [LeetCode]Fraction to Recurring Decimal
- Android自定义View之Activity页面的组成
- 这是个类和对象
- 513前端学习资料----dojo入门(1)
- 集合1
- 树莓派连接手机
- 日期类模板 , 该日期是第几天,第几天的日期,两个日期的差 ,一个日期的n天之后的日期...
- 时间格式类
- 数据结构实验之查找三:树的种类统计