Leetcode:166. 分数到小数

Leetcode:166. 分数到小数

题目描述

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"

示例 2:

输入: numerator = 2, denominator = 1
输出: "2"

示例 3:

输入: numerator = 2, denominator = 3
输出: "0.(6)"

思路

思路1 长除法

当余数相等时会重复,需要注意的点是边界问题,正负极值,所以可以改为long类型

代码

代码1

class Solution {
    public String fractionToDecimal(int numerator, int denominator) {
        if (numerator == 0){
            return "0";
        }
        if (denominator == 0){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        long devideNum = Math.abs(Long.valueOf(numerator));
        long devidedNum = Math.abs(Long.valueOf(denominator));
        int negetiveNum = 0;
        if (numerator < 0){
            negetiveNum += 1;
        }
        if (denominator < 0){
            negetiveNum += 1;
        }
        long remain = devideNum % devidedNum;
        if (negetiveNum == 1){
            sb.append("-");
        }
        sb.append(String.valueOf(devideNum / devidedNum));
        if (remain == 0){
            return sb.toString();
        }
        sb.append(".");
        Map remainMap = new HashMap<>();
        while (remain != 0){
            if (remainMap.containsKey(remain)){
                sb.insert(remainMap.get(remain), "(");
                sb.append(")");
                break;
            }
            remainMap.put(remain, sb.length());
            remain *= 10;
            sb.append(String.valueOf(remain / devidedNum));
            remain = remain % devidedNum;
        }
        return sb.toString();
    }
}

复杂度分析

思路1时间复杂度

非线性时间?(但整数有界)

思路2空间复杂度

非线性时间?


文章作者: 小风雷
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小风雷 !
评论
 上一篇
Leetcode:204. 计数质数 Leetcode:204. 计数质数
Leetcode:204. 计数质数题目描述统计所有小于非负整数 n 的质数的数量。 示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 思路思路1统计从2开始到n的所有数进行非
2020-05-04
下一篇 
Leetcode:172. 阶乘后的零 Leetcode:172. 阶乘后的零
Leetcode:172. 阶乘后的零题目描述给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1:输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。 示例 2:输入: 5 输出: 1 解释: 5! = 120, 尾
2020-05-03
  目录