思路
这个题其实要明白这个二进制的转换,就可以做出来了,我刚开始想的是直接转换成十进制,然后最后再相加起来,然后再转成二进制,这样最开始做的话我也不知道怎么错了,因为力扣这个不好测试嘛,所以就去看了题解,那么题解是这样说的
我们将俩个数组相加,满足sum = a + b + c ,c是进位标志,会得到以下数据:1 , 2 , 0
而当sum = 2的时候我们就好向前减一,那么就c = -1,而当sum = -1时,c = 1,sum = 1;
而sum=1或者0的时候就不变
那么明白这个道理之后就不用,就可以代码实现了
代码实现
void fun(int *x,int left,int right)
{
while(left<right)
{
int t=x[left];
x[left]=x[right];
x[right]=t;
left++;
right--;
}
}
int* addNegabinary(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize){
int *x=(int*)calloc(arr1Size+arr2Size+1,sizeof(int));
int n=arr1Size-1,m=arr2Size-1;
int k=0,c=0,sum,a,b;
while(n>=0||m>=0||c)
{
a = n < 0 ? 0 : arr1[n]; //防止数组溢出
b = m < 0 ? 0 : arr2[m];
sum=a+b+c;
if(sum>=2) //列举情况
{
c=-1;
sum-=2;
}
else if(sum==-1)
{
c=1;
sum=1;
}
else {
c=0;
}
n--;
m--;
x[k++]=sum;
}
while(k>1&&x[k-1]==0){ //清除多余的0
k--;
}
*returnSize=k;
fun(x,0,k-1); //数组翻转
return x;
}