zoukankan      html  css  js  c++  java
  • LeetCode-166 Fraction to Recurring Decimal

    题目描述

    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.

    题目大意

    给两个数字,分别代表分子和分母,将该分数形式转换为小数形式以字符串格式返回,其中小数点后如果出现重复的形式,用“()”将重复部分括起来。

    示例

    E1

    Input: numerator = 1, denominator = 2
    Output: "0.5"

    E2

    Input: numerator = 2, denominator = 1
    Output: "2"

    E3

    Input: numerator = 2, denominator = 3
    Output: "0.(6)"

    解题思路

    用map保存小数点之后的位置,当遇到重复的数字时,将’(‘插入该位置,并在最后加入’)‘,并返回结果。

    注意越界情况(用long代替int)以及负数情况(判断加负号)。

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(n)

    代码

    class Solution {
    public:
        string fractionToDecimal(int n, int d) {
            if(n == 0)
                return "0";
            string ans = "";
            if((n < 0) ^ (d < 0))
                ans += '-';
            long ld = labs(d), ln = labs(n), r = ln % ld;
            ans += to_string(ln / ld);
            if(!r)
                return ans;
            
            ans += '.';
            unordered_map<long, int> m;
            //依次计算小数点之后的各个小数的数值并判断是否已经出现
            while(r) {
                //如果出现重复,则将双括号添加到结果中返回
                if(m.find(r) != m.end()) {
                    ans.insert(m[r], "(");
                    ans += ')';
                    break;
                }
                //否则记录未重复的小数的位置,并计算下一位小数
                m[r] = ans.length();
                r *= 10;
                ans += to_string(r / ld);
                r %= ld;
            }
            
            return ans;
        }
    };
  • 相关阅读:
    正在呢 webflux
    reactive reactor
    从早上5:30开始整理资料
    1
    ES基础(四十七)第二部分总结与测验
    ES基础(四十六)Elasticsearch 数据建模最佳实践
    ES基础(四十四)Ingest Pipeline & Painless Script
    ES基础(四十三)Update by Query & Reindex
    ES基础(四十二)文档的父子关系
    ES基础(四十一)对象及Nested对象
  • 原文地址:https://www.cnblogs.com/heyn1/p/10952043.html
Copyright © 2011-2022 走看看