博客
关于我
LeetCode 166. Fraction to Recurring Decimal
阅读量:802 次
发布时间:2023-01-30

本文共 1741 字,大约阅读时间需要 5 分钟。

分数转换为小数的优雅解决方案

将两个整数作为分子和分母处理时,需要将结果表示为小数形式。这种情况下,如果分数无法整除,可能会出现无限循环的小数部分。我们的任务是正确地将这些情况表示出来。

问题描述

给定两个整数,分子和分母,目标是将其转换为小数字符串格式。在循环小数的情况下,循环节需要用括号括起来。例如:

  • 给定分子 = 1,分母 = 2,结果是“0.5”。
  • 给定分子 = 2,分母 = 3,结果是“0.(6)”。
  • 给定分子 = 7,分母 = 6,结果是“1.1(6)”。

解题思路

我们可以通过模拟手工除法来找到循环节。每次将余数乘以10,然后除以分母。如果余数重复出现,就可以确定小数部分开始循环。

  • 除法模拟:将分子和分母代入长除法算法。每次取整数部分,并记录余数。
  • 余数检测:使用哈希表记录余数第一次出现的位置。如果余数重复,就说明出现了循环节。
  • 分离整数部分和小数部分:整数部分直接从除法中得到,小数部分则根据余数变化记录。
  • 这种方法避免了直接处理小数部分带来的复杂性,能高效地处理循环小数问题。

    代码实现

    以下是我们为实现上述思路开发的代码:

    Solution.filename = "fractionToDecimal.java";public class Solution {    public String fractionToDecimal(int numerator, int denominator) {        if (numerator == 0) {            return "0";        }        StringBuilder fraction = new StringBuilder();        // 处理负号        if ((numerator < 0 ^ denominator < 0) {            fraction.append("-");        }        long num = Math.abs((long) numerator);        long denom = Math.abs((long) denominator);        fraction.append(num / denom);        long remainder = num % denom;        if (remainder == 0) {            return fraction.toString();        }        fraction.append(".");        HashMap
    map = new HashMap<>(); while (remainder != 0) { if (map.containsKey(remainder)) { fraction.insert(map.get(remainder), '('); fraction.append(')'); break; } map.put(remainder, fraction.length()); remainder *= 10; fraction.append(remainder / denom); remainder %= denom; } return fraction.toString(); }}

    代码解析

  • 初始化处理:首先检查分子是否为0,如果是,直接返回"0"。
  • 符号处理:判断分子和分母的符号,确保结果的小数部分符号正确。
  • 整数部分计算:通过整数除法得到整数部分,并记录余数。
  • 余数循环处理:使用哈希表记录余数位置,找到循环节表示的位置,并在字符串中插入括号。
  • 这种方法能有效且准确地将分数转换为小数格式,同时正确处理循环小数的情况。

    转载地址:http://fagyk.baihongyu.com/

    你可能感兴趣的文章
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP、CV 很难入门?IBM 数据科学家带你梳理
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP入门(六)pyltp的介绍与使用
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:从头开始的文本矢量化方法
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    NLTK - 停用词下载
    查看>>
    nmap 使用总结
    查看>>
    nmap 使用方法详细介绍
    查看>>
    nmap使用
    查看>>
    nmap使用实战(附nmap安装包)
    查看>>