题目:
给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2) 表示。
注意, 除非字符串就是 "0",否则返回的字符串中不能含有前导零。
算法:
方法一:模拟
先考虑模拟正二进制的转换,负二进制的权重:
1 -2 4 -8 16 -32 64 -128
每隔一个位置,权重为负数。为什么转换为负数之后的最低位是准确的呢?!!!
9(1001)->4(100),得到1
-4(1100)->-2(110),得到0
2(10)->1(1),得到0
-1(11)->0(1),得到1
但是为什么这样可以呢?
因为位权完全模拟了这个过程:
1 -2 4 -8 16 -32 64 -128
func baseNeg2(n int) string {
if n == 0 {
return "0"
}
ans := make([]string, 0)
for n != 0 {
if n & 1 == 0 {
ans = append(ans, "0")
} else {
ans = append(ans, "1")
}
n = -(n >> 1)
}
left, right := 0, len(ans) - 1
for left < right {
ans[left], ans[right] = ans[right], ans[left]
left ++
right --
}
return strings.Join(ans,"")
}