题目链接
英文链接:https://leetcode.com/problems/convert-to-base-2/
中文链接:https://leetcode-cn.com/problems/convert-to-base-2/
题目详述
给出数字 N,返回由若干 “0” 和 “1”组成的字符串,该字符串为 N 的负二进制(base -2)表示。
除非字符串就是 “0”,否则返回的字符串中不能含有前导零。
示例 1:
1 | 输入:2 |
示例 2:
1 | 输入:3 |
示例 3:
1 | 输入:4 |
提示:
- 0 <= N <= 10^9
题目详解
- 十进制 n 转换到 k 进制(k > 0)的方法是
除 k 取余法
。 - 最后翻转得到的结果。
1 | public String toBase(int n, int k) { |
- 十进制 n 转换到 k 进制(k < 0)的方法也是
除 k 取余法
。 - 只不过在余数为负数时,余数要加上进制的相反数使余数大于 0,同时要向前进 1 位。
- 最后翻转得到的结果。
1 | public String toNegativeBase(int n, int k) { |
- 有了上面的知识,转化为 -2 进制就比较简单了。
1 | public class LeetCode_01017 { |
- 由于在计算机中 2 的特殊性,可以运用位运算来解决。
- 转化为 2 进制可以像下面这样写(或者直接调用
Integer.toBinaryString()
)。
1 | public String baseNeg2(int N) { |
- 同理,转化为 -2 进制也可以运用位运算。
1 | public String baseNeg2(int N) { |