https://leetcode.com/problems/convert-to-base-2/description/
给定一个非负整数 n n n,将其转为 − 2 -2 −2进制的数,以字符串形式输出。
如果
n
=
0
n=0
n=0则直接返回"0"
。设
n
=
a
k
(
−
2
)
k
+
.
.
.
+
a
0
(
−
2
)
0
n=a_k(-2)^k+...+a_0(-2)^0
n=ak(−2)k+...+a0(−2)0,那么当
n
n
n是奇数的时候
a
0
=
1
a_0=1
a0=1,否则
a
0
=
0
a_0=0
a0=0,算出
a
0
a_0
a0之后,则
(
n
−
a
0
)
/
(
−
2
)
=
a
k
(
−
2
)
k
−
1
+
.
.
.
+
a
1
(
−
2
)
0
(n-a_0)/(-2)=a_k(-2)^{k-1}+...+a_1(-2)^0
(n−a0)/(−2)=ak(−2)k−1+...+a1(−2)0依次再继续求
a
1
,
.
.
.
,
a
k
a_1,...,a_k
a1,...,ak即可。可以证明这个过程一定会终止。代码如下:
class Solution {
public:
string baseNeg2(int n) {
if (!n) return "0";
string s;
while (n) {
s += to_string(n & 1);
n -= n & 1;
n /= -2;
}
reverse(s.begin(), s.end());
return s;
}
};
时间复杂度 O ( log n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)。