LeetCode 面试题 05.02. 二进制数转字符串
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 面试题 05.02. 二进制数转字符串相关的知识,希望对你有一定的参考价值。
【LetMeFly】面试题 05.02.二进制数转字符串
力扣题目链接:https://leetcode.cn/problems/bianry-number-to-string-lcci/
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625 输出:"0.101"
示例2:
输入:0.1 输出:"ERROR" 提示:0.1无法被二进制准确表示
提示:
- 32位包括输出中的
"0."
这两位。 - 题目保证输入用例的小数位数最多只有
6
位
方法一:模拟:乘2取余
这道题比较“便民”的是,二进制长度超过32则输出ERROR。因此我们就不需要判断是否为“无限小数”了。
每次将num乘以2,如果num的个位是1,则将1
添加到答案末尾(
n
u
m
−
=
1
num -= 1
num−=1);否则将0
添加到答案末尾。
如此往复,直到num为0(转换完成)或答案的长度到达32(强制结束转换,转换失败)
- 时间复杂度 O ( C ) O(C) O(C),其中 C C C是转换为二进制后的字符串长度。 C ≤ 31 C\\leq 31 C≤31
- 空间复杂度
O
(
C
)
O(C)
O(C),当返回
ERROR
时需要占据32个char大小的空间
AC代码
C++
class Solution
public:
string printBin(double num)
string ans = "0.";
while (true)
num *= 2;
int thisVal = num >= 1;
ans += (char)('0' + thisVal);
num -= thisVal;
if (num == 0)
return ans;
if (ans.size() == 32)
return "ERROR";
;
Python
class Solution:
def printBin(self, num: float) -> str:
ans = "0."
while True:
num *= 2
thisVal = num >= 1
ans += chr(ord('0') + thisVal)
num -= thisVal
if num == 0:
return ans
if len(ans) == 32:
return "ERROR"
What’s more
本题无输入为“0”的测试样例,截至当前(2023.3.2 9:53),在控制台输入0时得到的答案是“0.”。但其实答案为“0”比较好
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/129295125
以上是关于LeetCode 面试题 05.02. 二进制数转字符串的主要内容,如果未能解决你的问题,请参考以下文章