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 C31
  • 空间复杂度 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. 二进制数转字符串的主要内容,如果未能解决你的问题,请参考以下文章

字符串面试题 05.02. 二进制数转字符串

#yyds干货盘点# LeetCode程序员面试金典:二进制数转字符串

LeetCode 面试题15. 二进制中1的个数

LeetCode面试题15. 二进制中1的个数

LeetCode面试题15. 二进制中1的个数

LeetCode面试题16. 数值的整数次方