给出数字 N
,返回由若干 "0"
和 "1"
组成的字符串,该字符串为 N
的负二进制(base -2
)表示。
除非字符串就是 "0"
,否则返回的字符串中不能含有前导零。
示例 1:
输入:2 输出:"110" 解释:(-2) ^ 2 + (-2) ^ 1 = 2
示例 2:
输入:3 输出:"111" 解释:(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
示例 3:
输入:4 输出:"100" 解释:(-2) ^ 2 = 4
提示:
0 <= N <= 10^9
其实负二进制和正二进制求解的过程很相似,无非就是将被除数由2换成了-2,还有最关键的一步,正二进制中的n=n/2换成了n=(n-a)/(-2),其中a代表的是abs(n%(-2))
class Solution {
public:
string baseNeg2(int N) {
stack<int> s;
int n=N;
string str1;
if(n==0){
return "0";
}
while(n!=0){
int a=abs(n%(-2));//abs函数是确保将-1和1都按照1输出
s.push(a);
n=(n-a)/(-2);//这一步是最关键的,
}
while(!s.empty()){
str1+=s.top()+'0';
s.pop();
}
return str1;
}
};