一 目录
不折腾的前端,和咸鱼有什么区别
目录 |
---|
一 目录 |
二 题目 |
三 解题思路 |
四 统计分析 |
五 解题套路 |
二 题目
二进制数转字符串。
给定一个介于0和1之间的实数(如0.72),
类型为 double,
打印它的二进制表达式。
如果该数字不在0和1之间,
或者无法精确地用32位以内的二进制表示,
则打印“ERROR”。
示例1:
输入:0.625
输出:"0.101"
示例2:
输入:0.1
输出:"ERROR"
提示:0.1无法被二进制准确表示
提示:
32位包括输出中的"0."这两位。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number} num
* @return {string}
*/
var printBin = function(num) {
};
根据上面的已知函数,小伙伴们可以先尝试破解本题,确定了自己的答案后再看下面代码。
三 解题思路
有 2 种解法:
利用 API
利用转换技巧
06:12 解法一:利用 API
const printBin = (num) => {
const result = num.toString(2);
if (result >= 1 || result <= 0 || result.length > 32) {
return 'ERROR';
}
return result;
};
说起数学都想利用一番 API,要不然会头皮发麻。
10:48 解法二:暴力
const printBin = (num) => {
let result = '0.';
let i = 30;
while (num > 0 && i--) {
num *= 2;
if (num >= 1) {
result += '1';
--num;
} else {
result += '0';
}
}
return num !== 0 ? 'ERROR' : result;
};
由于题目要求 精确地用 32 位以内的二进制表示,并且 包括 0.,而且是 介于 0 和 1 之间的实数,所以我们利用十进制小数转换成二进制小数时的 乘 2 取整,顺序排列 法。
具体做法:
用 2 乘十进制小数,得到积
将积的整数部分取出,再用 2 乘于剩余的小数部分,得到下一个积
以此往复,直到积中小数部分为 0,或者达到 32 位精度
这种技巧将在 jsliang 的《十进制和二进制互相转换》中详细介绍。
具体地址可以咨询 jsliang。
四 统计分析
本题不需要统计分析~
五 套路分析
本题套路:
利用 JS 的数学 API 或者熟练十进制和二进制互相转换方法,可以破解这类题型。
如果小伙伴有更好的思路想法,或者没看懂其中某种解法,欢迎评论留言或者私聊 jsliang~
不折腾的前端,和咸鱼有什么区别!
jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。
浪子神剑 会每天更新面试题,以面试题为驱动来带动大家学习,坚持每天学习与思考,每天进步一点!
扫描上方二维码,关注 jsliang 的公众号(左)和 浪子神剑 的公众号(右),让我们一起折腾!
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。