LeetCode 119. Pascal's Triangle II
这个问题最开始可以像前面一个题一样,用多个数组,然后取那一行
我开始只想用一个ret数组,发现总是出错,后面用tmp数组,可以了
LeetCode 119. Pascal's Triangle II

int* getRow(int rowIndex, int* returnSize) {
    int *ret = (int*)malloc(sizeof(int) * (rowIndex+1));
    int *tmp = (int*)malloc(sizeof(int) * (rowIndex+1));
    ret[0] = 1;
    *returnSize = rowIndex + 1;
    if (rowIndex == 0) {
        return ret;
    }
    ret[1] = 1;
    if(rowIndex == 1) {
        return ret;
    }
    for (int i = 2; i <= rowIndex; ++i) {
        tmp[0]=1;
        tmp[i] = 1;
        for (int j = 0; j < i-1; ++j) {
            tmp[j+1] = ret[j] + ret[j+1];
        }
        for (int j = 0; j <= i; ++j) {
            ret[j]=tmp[j];
        }
    }
    free(tmp);
    return ret;
}

现在内存55%,有点多
在讨论中翻到这个:https://leetcode.com/problems/pascals-triangle-ii/discuss/38575/Share-my-c-code-easy-understand
发现居然可以倒着算,这样就不用tmp数组了
LeetCode 119. Pascal's Triangle II

int* getRow(int rowIndex, int* returnSize) {
    int *ret = (int*)malloc(sizeof(int) * (rowIndex+1));
    ret[0] = 1;
    *returnSize = rowIndex + 1;
    if (rowIndex == 0) {
        return ret;
    }
    ret[1] = 1;
    if(rowIndex == 1) {
        return ret;
    }
    for (int i = 2; i <= rowIndex; ++i) {
        ret[0]=1;
        ret[i] = 1;
        for (int j = i-1; j > 0; --j) {
            ret[j] = ret[j] + ret[j-1];
        }
    }
    return ret;
}

内存变成65%,还有进步空间
LeetCode 119. Pascal's Triangle II

int* getRow(int rowIndex, int* returnSize) {
    int *ret = (int*)malloc(sizeof(int) * (rowIndex+1));
    *returnSize = rowIndex + 1;
    for (int i = 0; i < *returnSize; ++i) {
        ret[i]=1;
    }
    if (rowIndex == 0) {
        return ret;
    }
    if(rowIndex == 1) {
        return ret;
    }
    for (int i = 2; i <= rowIndex; ++i) {
        for (int j = i-1; j > 0; --j) {
            ret[j] = ret[j] + ret[j-1];
        }
    }
    return ret;
}

把初始化放在一起,变成85%
还有没有办法变成90+?

相关文章: