class Solution
{
public:
vector<int> addNegabinary(vector<int>& arr1, vector<int>& arr2)
{
int num1 = 0, num2 = 0;
for (int i = 0; i < arr1.size(); i++)
if (arr1[i])num1 += pow(-2,arr1.size() - 1 - i);
for (int i = 0; i < arr2.size(); i++)
if (arr2[i])num2 += pow(-2,arr2.size() - 1 - i);
num1 += num2;
string ans = bitset<64>(num1).to_string();
auto it = ans.find_first_not_of("0");
ans = ans.substr(it);
vector<int>v;
for (auto i : ans)
v.emplace_back(i ^ 48);
return v;
}
};
以上代码自行测试是可以过的,但由于
1 <= arr1.length, arr2.length <= 1000
估计是数字太大转换不过来了,所以过不了
模拟
class Solution {
public:
vector<int> addNegabinary(vector<int>& arr1, vector<int>& arr2) {
int i = arr1.size() - 1, j = arr2.size() - 1;
vector<int> ans;
for (int c = 0; i >= 0 || j >= 0 || c; i--, j--) {
int a = i < 0 ? 0 : arr1[i];
int b = j < 0 ? 0 : arr2[j];
int x = a + b + c;
c = 0;//重置进位
if (x >= 2)
{
x -= 2;
c = -1;
}
else if (x == -1)
{
x = 1;
c = 1;
}
ans.emplace_back(x);
}
while (ans.size() > 1 && ans.back() == 0)
ans.pop_back();
reverse(ans.begin(), ans.end());
return ans;
}
};