力扣166(java)-分数到小数(中等)
题目:
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104 。
示例 1:
输入:numerator = 1, denominator = 2
输出:"0.5"
示例 2:
输入:numerator = 2, denominator = 1
输出:"2"
示例 3:
输入:numerator = 4, denominator = 333
输出:"0.(012)"
提示:
-231 <= numerator, denominator <= 231 - 1
denominator != 0
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fraction-to-recurring-decimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
模拟:
1.首先需要将分子分母转换成long类型。因为分子分母起初均为int类型,当numerator = −231 和 denominator = -1时,计算结果为231,超出 int 的范围 [-231, 231 - 1];
2.将分数计算出小数拆解成三个问题:
- 确定小数的正负号:将分子分母相乘,如果计算结果小于0,则先往答案头部加一个 “-” 号;
- 确定小数的小数点前面的整数:分子/分母整数相除的结果就为小数点前面的整数,整除得到的整数部分可能为0;
- 确定小数的小数点后的有限小数或无限循环小数:模拟数学中除法的计算过程,不断对余数补0(乘10),再重新计算余数和除数的新余数
- 如果在某一步出现分子能与分母整除,则是有限小数;
- 一旦出现之前出现过的余数,说明产生了循环小数,则使用哈希表存储余数最早出现的位置,出现相同余数时,则将左括号插入到循环小数的开始位置,然后在循环小数结尾加上右括号,这样括号内的数即为循环小数部分。
java代码:
1 class Solution {
2 public String fractionToDecimal(int numerator, int denominator) {
3 //将分子分母转换成long
4 long a = numerator, b = denominator;
5 //如果本身能够整除,直接返回计算结果
6 if(a % b == 0) return String.valueOf(a / b);
7 StringBuilder sb = new StringBuilder();
8 //如果分子分母异号,直接追加一个负号
9 if(a * b < 0) sb.append('-');
10 //取分子分母的绝对值
11 a = Math.abs(a);
12 b = Math.abs(b);
13 //计算小数点前面的整数
14 sb.append(String.valueOf(a/b) + ".");
15 //将余数赋值给a
16 a %= b;
17 Map<Long, Integer> map = new HashMap<>();
18 //记录当前余数的开始位置,并继续模拟除法
19 while(a != 0 && !map.containsKey(a)){
20 map.put(a, sb.length());
21 a *= 10;
22 sb.append(a / b);
23 a %= b;
24 }
25 if(a == 0) return sb.toString();
26 return sb.insert(map.get(a).intValue(), '(').append(')').toString();
27 }
28 }

小知识:
StringBuilder insert(int offset, char c):在此序列中插入 char参数的字符串表示形式。
offset 表示字符插入的位置,该位置元素(包括该位置的元素)及之后字符串往后移
例如:如果z引用当前内容为“ start ”的字符串构建器对象,那么z.insert(4, “le”)会将字符串构建器更改为包含“ starlet ”。
力扣166(java)-分数到小数(中等)的更多相关文章
- Java实现 LeetCode 166 分数到小数
166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...
- Leetcode 166.分数到小数
分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
- 力扣算法经典第一题——两数之和(Java两种方式实现)
一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
- LeetCode 1244. 力扣排行榜
地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...
- 【力扣leetcode】-787. K站中转内最便宜的航班
题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...
- 洛谷P1530 分数化小数 Fractions to Decimals
P1530 分数化小数 Fractions to Decimals 103通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目 ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
随机推荐
- 基于Python的子进程获取键盘输入
一 概念 众所周知,python中的获取键盘输入,input函数是没办法用在子程序的,这就限制了它的用途.想要在子程序中获取键盘输入.唯有 fn=sys.stdin.fileno函数了. 二 实例解析 ...
- git clone error: RPC failed; curl 18 transfer closed with outstanding read data remaining
备忘 git clone比较大的工程时,出现这种错误:error: RPC failed; curl 18 transfer closed with outstanding read data rem ...
- Kotlin 快速遍历File及子目录筛选指定类型文件
原文: Kotlin 快速遍历File及子目录筛选指定类型文件 - Stars-One的杂货小窝 在做文件相关的app,经常会遇到筛选某个文件夹下的符合条件的文件对象,且要包含子文件夹,之前一直是自己 ...
- 各种O总结及阿里代码规范总结
首先梳理下POJO POJO包括 DO/DTO/BO/VO(所有的POJO类属性必须使用包装数据类型.) 定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值. controller使 ...
- 14_编译FFmpeg
本文来详细讲解一下:如何在Mac.Windows环境下成功编译FFmpeg. 目标 这里先提前说明一下,最后希望达到的效果: 编译出ffmpeg.ffprobe.ffplay三个命令行工具 只产生动态 ...
- Harris/Shi-Tomasi角点检测
机器视觉--角点检测 什么是角点检测 在几何学里,我们会看到各种各样的三角形.多边形等,它们都有一个显著的特征:包含了角点信息.比如在三角形里,我们有三个角:在矩形里,我们有四个角.我们将找到这些图像 ...
- 三维模型3DTile格式轻量化在三维展示效果上的重要性分析
三维模型3DTile格式轻量化在三维展示效果上的重要性分析 三维模型3DTile格式轻量化在三维展示效果上扮演着至关重要的角色.随着计算机图形学和虚拟现实技术的不断发展,我们已经可以创建和渲染非常精细 ...
- Swift self, Self, ==, === 傻傻分不清楚?
本文首发于 Ficow Shen's Blog,原文地址: Swift self, Self, ==, === 傻傻分不清楚?. 内容概览 前言 self 和 Self == 和 === 总结 前言 ...
- 面试官:说说Spring中IoC实现原理?
IoC(Inversion of Control)即控制(权)反转,它是一种编程思想,它的核心理念是将对象的创建和管理权力从对象本身转移到外部的容器或框架. IoC 的主要目的是降低代码之间的耦合度, ...
- KingbaseES V8R6 复制冲突之锁类型冲突
背景 昨天遇到客户现场的一个有关复制冲突的问题 备库报错:ERROR: canceling statement due to conflict with recovery,user was holdi ...