負(fù)二進(jìn)制轉(zhuǎn)換
給你一個整數(shù)?n
?,以二進(jìn)制字符串的形式返回該整數(shù)的?負(fù)二進(jìn)制(base -2
)表示。
注意,除非字符串就是?"0"
,否則返回的字符串中不能含有前導(dǎo)零。
示例 1:
輸入:n = 2 輸出:"110" 解釋:(-2)2 + (-2)1 = 2
示例 2:
輸入:n = 3 輸出:"111" 解釋:(-2)2 + (-2)1 + (-2)0 = 3
示例 3:
輸入:n = 4 輸出:"100" 解釋:(-2)2 = 4
提示:
0 <= n <= 109
思路:將一個十進(jìn)制的數(shù) n 轉(zhuǎn)化為任意 x 進(jìn)制都可以使用這樣的思路。
第一步:先得到轉(zhuǎn)化為進(jìn)制結(jié)果的最后一位 t :n % x (但如果得到的最后一位是負(fù)數(shù)的話,需要根據(jù)語言特性將其轉(zhuǎn)化為正數(shù)),然后將最后一位添加到目標(biāo)字符串中,然后將這個最后一位 t 在 n 中減去。
第二步:將這個十進(jìn)制數(shù)按 x 進(jìn)制的規(guī)則右移一位:n /= x,然后重復(fù)得到最后一位并添加的操作,最終可以得到一個字符串。
第三步:因?yàn)槊看蔚玫降亩际抢碚撋系淖詈笠晃?,所以最后需要將字符串逆置,就得到了最終答案!文章來源:http://www.zghlxwxcb.cn/news/detail-861796.html
力扣代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-861796.html
class Solution {
public:
string baseNeg2(int n) {
if(n == 0) return "0";
int x = -2;
string s;
while (n)
{
if (n % x == 0) // 最后一位數(shù)是 0
s += "0";
else
{
// 將最后一位減去, 因?yàn)?x 進(jìn)制的最后一位在權(quán)重上和十進(jìn)制是一樣
n -= 1;
s += "1";
}
n /= x; // 將 n 右移一位
}
reverse(s.begin(), s.end()); // 逆序字符串
return s;
}
};
到了這里,關(guān)于【LeetCode】每日一題 - 負(fù)二進(jìn)制轉(zhuǎn)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!