面试题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
添加到答案末尾($num -= 1$);否则将0
添加到答案末尾。
如此往复,直到num为0(转换完成)或答案的长度到达32(强制结束转换,转换失败)
- 时间复杂度$O(C)$,其中$C$是转换为二进制后的字符串长度。$C\leq 31$
- 空间复杂度$O(C)$,当返回
ERROR
时需要占据32个char大小的空间
AC代码
C++
1 |
|
Python
1 |
|
What’s more
本题无输入为“0”的测试样例,截至当前(2023.3.2 9:53),在控制台输入0时得到的答案是“0.”。但其实答案为“0”比较好
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/129295125
面试题05.02.二进制数转字符串
https://blog.letmefly.xyz/2023/03/02/LeetCode 面试题 05.02. 二进制数转字符串/