2023年11月27日 星期一

[113] Path Sum II

發現別人寫的好漂亮欸!!!
覺得好羨慕哈哈哈哈哈!!!!!!!
直覺寫好真的好醜QQ
可是......給人類閱讀就應該一步一步來啊啊啊啊啊啊啊 !!!!!

int checkSum(struct TreeNode* root, int target, int idx, int o_idx,int **ret, int **returnColumnSizes, int *data)
{
if (root==NULL)
return o_idx;
if (root->left == NULL && root->right == NULL)
{
int sum=root->val;
for (int i=0;i<idx;i++)
sum+=data[i];
if (sum == target)
{
ret[o_idx]=calloc(idx+1, sizeof(int));
(*returnColumnSizes)[o_idx]= idx+1;
memcpy(ret[o_idx], data, idx * sizeof(int));

ret[o_idx][idx] = root->val;
return o_idx+1;
}
else
return o_idx;

}
data[idx] = root->val;
o_idx = checkSum(root->left, target, idx+1,o_idx, ret, returnColumnSizes,data);
o_idx = checkSum(root->right, target, idx+1,o_idx, ret, returnColumnSizes,data);

return o_idx;
}

int** pathSum(struct TreeNode* root, int targetSum, int* returnSize, int** returnColumnSizes) {
int idx=0, o_idx=0;
int maxLevel = 320;
int maxLen = 1000;
int *data = calloc (maxLen, sizeof(int));
int** ret = calloc (maxLevel, sizeof(int*));
*returnColumnSizes= calloc (maxLen, sizeof(int));
*returnSize = checkSum(root, targetSum, idx, o_idx, ret, returnColumnSizes, data);
return ret;
}

看了別人的解法,看來return 的部分可以用void ,直接把它傳進func裡,當有答案的時候加一就好了。再來就是,target 可以當做參數傳進去,每次都把該個node的val 從它裡面減掉,到了leaf 的時候判斷它是不是零就可以了,就不必再到了leaf 的時候再把它們加總算看看是不是等於target ! (為什麼別人這麼聰明!!!)

好吧就先降吧XD

沒有留言:

張貼留言