【发布时间】:2017-02-01 06:46:15
【问题描述】:
有一个问题,其中给出了两个随机整数数组,其中从 0 到 9 的数字出现在每个索引处(即单个数字整数出现在两个给定数组的每个索引处)。我需要找到输入数组表示的数字的总和,并将结果放入另一个数组中。
我相信我的代码一切正常,因为我对不同的数组执行了近 50 到 60 次。但是当我在学校的在线评委中提交时,它只接受了 4 个测试用例,而拒绝了另外两个。我不知道在哪种情况下它会给出错误的输出。需要一点帮助。
这是我的代码
public static int[] sumOfTwoArrays(int[] arr1, int[] arr2){
int size1 = arr1.length;
int size2 = arr2.length;
int carry = 0,sum,s,r;
if(size1 == size2) {
int arr3[] = new int[size1+1];
for(int i=arr1.length-1;i>=-1;i--) {
if(i==-1) {
arr3[i+1] = carry;
//System.out.println(i+1+" "+arr3[i+1]);
} else {
sum = arr1[i] + arr2[i];
if(sum>9) {
s =sum;
r = s % 10;
arr3[i+1] = carry + r;
carry = 1;
//System.out.println(i+" "+arr3[i]);
} else {
if(sum==9 && carry==1) {
s =sum+carry;
r = s % 10;
arr3[i+1] = r;
} else {
arr3[i+1] = sum+carry;
carry=0;
}
//System.out.println(i+" "+arr3[i]);
}
}
}
return arr3;
} else if (size1>size2) {
int arr3[] = new int[size1+1];
int diff = arr1.length - arr2.length;
for(int i=arr1.length-1;i>=-1;i--) {
if(i==-1) {
arr3[i+1] = carry;
} else {
if(i>=diff) {
sum = arr1[i] + arr2[i-diff];
if(sum>9) {
s =sum;
r = s % 10;
arr3[i+1] = carry + r;
carry = 1;
} else {
if(sum==9 && carry==1) {
s =sum+carry;
r = s % 10;
arr3[i+1] = r;
} else {
arr3[i+1] = sum+carry;
carry=0;
}
}
} // end of diff i
else {
arr3[i+1] = arr1[i];
carry = 0;
}
}
}
return arr3;
} else {
int arr3[] = new int[size2+1];
int diff = arr2.length - arr1.length;
for(int i=arr2.length-1;i>=-1;i--) {
if(i==-1) {
arr3[i+1] = carry;
} else {
if(i>=diff) {
sum = arr2[i] + arr1[i-diff];
if(sum>9) {
s =sum;
r = s % 10;
arr3[i+1] = carry + r;
carry = 1;
} else {
if(sum==9 && carry==1) {
s =sum+carry;
r = s % 10;
arr3[i+1] = r;
} else {
arr3[i+1] = sum+carry;
carry=0;
}
}
} // end of diff i
else {
arr3[i+1] = arr2[i];
carry = 0;
}
}
}
return arr3;
}
}
示例输入:
int[] arr1 = {8,5,3,9,6};
int[] arr2 = {3,3,3,3,3};
样本输出:
{1,1,8,7,2,9}
示例输入:
int[] arr1 = {8,5,3,9,6};
int[] arr2 = {1,0,5};
样本输出:
{0,8,5,5,0,1}
【问题讨论】:
-
这可能包含对算法、输入和输出的一些解释。
-
真的需要在你最后的输出中领先
0吗?不应该是{8,5,5,0,1}吗? -
@Roland 你不能轻易确定结果是否需要额外的数字来进行进位,所以我认为 OPs 方法是可以的。
-
嗯,这是真的。但我更想知道它是否真的需要?如果测试表明不允许使用前导
0怎么办? -
@PrinceVijayPratap 在我的解决方案中,我添加了您的错误的原因。