一、题目描述
给出数字 N
,返回由若干 "0"
和 "1"
组成的字符串,该字符串为 N
的负二进制(base -2
)表示。
除非字符串就是 "0"
,否则返回的字符串中不能含有前导零。
示例 1:
1 | 输入:2 |
示例 2:
1 | 输入:3 |
示例 3:
1 | 输入:4 |
提示:
0 <= N <= 10^9
二、题解
1.算法描述
- 栈+二进制转化的变形
2.个人分析
这道题是负二进制转换
我们先回忆一下二进制转换:
- 对给定的整数N进行短除,将余数压入栈中,
- 当最后除数为一时,停止短除,并将最后的一压入栈中,
- 最后将栈反转过来即可。
参考这一过程,我们可以基本捋清楚负二进制转换的过程:
- 对给定的整数N进行短除,将余数压入栈中,但是,我们会发现:余数可能为-1,所以我们对这个余数进行特殊处理,令其为一,此时的
N = (N - 1) / -2
- 二三步不变
3.代码
1 |
|