Create by jsliang on 2019-07-25 10:45:312019-07-25 11:40:47
一 目录
不折腾的前端,和咸鱼有什么区别
| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | | 四 执行测试 | | 五 LeetCode Submit | | 六 知识点 | | 七 解题思路 |
二 前言
难度:简单
涉及知识:位运算
题目地址:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/
题目内容:
给定一个整数,编写一个算法将这个数转换为十六进制数。
对于负整数,我们通常使用 补码运算 方法。
注意:
1. 十六进制中所有字母(a-f)都必须是小写。
2. 十六进制字符串中不能包含多余的前导零。
如果要转化的数为 0,那么以单个字符'0'来表示;
对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
3. 给定的数确保在32位有符号整数范围内。
4. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"
三 解题
小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。
解题代码:
var toHex = function (num) {
if (!num) {
return '0';
}
num = num > -1 ? num : num + Math.pow(2, 32);
let res = '',
Hex = '0123456789abcdef';
while (num) {
res = Hex[num % 16] + res;
num = num / 16 | 0;
}
return res;
};
四 执行测试
num
:26
return
:
1a
五 LeetCode Submit
✔ Accepted
✔ 100/100 cases passed (108 ms)
✔ Your runtime beats 8.7 % of javascript submissions
✔ Your memory usage beats 6.06 % of javascript submissions (34.2 MB)
六 知识点
Math
:JS 中的内置对象,具有数学常数和函数的属性和方法。Math
详细介绍
七 解题思路
首先,这道位运算,真的真的真的不想做。
然后,强忍住一脸懵逼,找到了一道题解,再细细解析:
如果这个数是负数,需要补码,补码即加上 2 的 32 次幂。
将这个数
%16
,得到的是当前位的十六进制,将其添加到res
前面。将这个数
/16
来进行循环遍历,直至这个数小于或者等于 0 为止。
最后,返回最终求解。
不折腾的前端,和咸鱼有什么区别!
jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。
扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。