Every day a leetcode
题目来源:405. 数字转换为十六进制数
解法1:数学
对int型的num直接操作会溢出,用long比较好。
下面代码构建了0 ~ 9,a ~ f的数组alpha。
vector<char> alpha;
for (int i = 0; i < 16; i++)
{
if (i < 10)
alpha.push_back('0' + i);
else
alpha.push_back('a' + i - 10);
}
若n为负数,加上INT_MAX,再做转换就是补码。
代码:
/*
* @lc app=leetcode.cn id=405 lang=cpp
*
* [405] 数字转换为十六进制数
*/
// @lc code=start
class Solution
{
public:
string toHex(int num)
{
if (num == 0)
return "0";
vector<char> alpha;
for (int i = 0; i < 16; i++)
{
if (i < 10)
alpha.push_back('0' + i);
else
alpha.push_back('a' + i - 10);
}
string ans = "";
long n = num;
if (n < 0)
n += pow(2, 32);
while (n)
{
ans += alpha[n % 16];
n /= 16;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(log16n),不太清楚对不对。
空间复杂度:O(1)