LeetCode[1] 2 つの数値の合計

恋に落ちる人もいれば、夜に海を見にドライブする人も、LeetCodeの最初の問題を解決できない人もいます。

最初の質問ができないだけでなく、その理由がわかりません。

自分で書いたCコード

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int i, j;
    for(i = 0; i < numsSize-1; i++){
        for(j = i + 1; j < numsSize; j++){
            if(nums[i] + nums[j] == target){
                returnSize = (int*)malloc(sizeof(int)*2);
                returnSize[0]=i;
                returnSize[1]=j;
                return returnSize;
            }
        }
    }
    return returnSize;
}

 私は間違いを犯しており、その理由を理解できません.公式コードを読んだ後、returnSizeを最初に2に設定し、次に0に設定しました.

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int i, j;
    for(i = 0; i < numsSize-1; i++){
        for(j = i + 1; j < numsSize; j++){
            if(nums[i] + nums[j] == target){
				int* result = (int*)malloc(sizeof(int)*2);
                result[0]=i;
                result[1]=j;
                *returnSize = 2;
                return result;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

主なものは returnSize.結果セットを返すために使用されると思っていましたが、実際には返された結果のサイズです。しかし、私が理解できないのは、リターンがないということです。なぜそれを使用しないでください。

いくつかのブログを調べたところ、returnSize が使用されていることがわかり、main で呼び出すときに使用する必要があり、値を自分で指定する必要があるため、問題は解決しました。

以下は完全なコードです。

#include<stdio.h>
#include<stdlib.h>

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int i, j;
    for(i = 0; i < numsSize-1; i++){
        for(j = i + 1; j < numsSize; j++){
            if(nums[i] + nums[j] == target){
				int* result = (int*)malloc(sizeof(int)*2);
                result[0]=i;
                result[1]=j;
                *returnSize = 2;
                return result;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

int main(){
    int nums[] = {2, 7, 11, 15};
    int numsSize = sizeof(nums)/sizeof(int);
    int target = 9;
    int* returnSize = NULL;
    twoSum(nums, numsSize, target, returnSize);
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_40016005/article/details/124131769