模拟
我们可以判断 n 从低位到高位的每一位,如果该位为 1,那么答案的该位为 1,否则为 0。如果该位为 1,那么我们需要将 n 减去 k。接下来我们更新 n = ⌊n/2⌋, k = -k。继续判断下一位。最后,我们将答案反转后返回即可。
class Solution {
public String baseNeg2(int n) {
if (n == 0) {
return "0";
}
int[] bits = new int[32];
for (int i = 0; i < 32 && n != 0; i++) {
if ((n & 1) != 0) {
bits[i]++;
if ((i & 1) != 0) {
bits[i + 1]++;
}
}
n >>= 1;
}
int carry = 0;
for (int i = 0; i < 32; i++) {
int val = carry + bits[i];
bits[i] = val & 1;
carry = (val - bits[i]) / (-2);
}
int pos = 31;
StringBuilder res = new StringBuilder();
while (pos >= 0 && bits[pos] == 0) {
pos--;
}
while (pos >= 0) {
res.append(bits[pos]);
pos--;
}
return res.toString();
}
}