刷题第一题给我整不会了,C这么难吗?用的枚举方式写的,工作一直用Java,毕业后就没接触过C,全忘了。C的代码迟迟无法通过,Java一次就过了。
经过一番摸索内存管理后,完整代码(C的还是不显示正确,最后看了官方答案才解决,但是不知道原理)如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
returnSize = (int*)malloc(2 * sizeof(int));
for(int i = 0; i < numsSize; i++){
int ni = nums[i];
for(int j = i+1; j < numsSize; j++){
int nj = nums[j];
if (ni + nj == target) {
printf("%d-%d",i,j);
returnSize[0] = i;
returnSize[1] = j;
return returnSize;
}
}
}
// If no solution is found, free the memory and return NULL
free(returnSize);
return NULL;
}让我想不通的是,printf("%d-%d",i,j); 这里已经输出正确答案了,最终显示的输出 returnSize 依然是空数组 [] !
下面参照官方的正确答案改的,求助C的大佬解答一下原理是什么?returnSize 和自定义的 result怎么关联起来的?
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
int* result = (int*)malloc(2 * sizeof(int));
for(int i = 0; i < numsSize; i++){
int ni = nums[i];
for(int j = i+1; j < numsSize; j++){
int nj = nums[j];
if (ni + nj == target) {
printf("%d-%d",i,j);
result[0] = i;
result[1] = j;
*returnSize = 2;
return result;
}
}
}
*returnSize = 0;
return NULL;
}class Solution {
public int[] twoSum(int[] nums, int target) {
int[] returnSize = new int[2];
for(int i = 0; i < nums.length; i++){
int ni = nums[i];
for(int j = i+1; j < nums.length; j++){
int nj = nums[j];
if (ni + nj == target) {
returnSize[0] = i;
returnSize[1] = j;
break;
}
}
}
return returnSize;
}
}