这个问题最开始可以像前面一个题一样,用多个数组,然后取那一行
我开始只想用一个ret数组,发现总是出错,后面用tmp数组,可以了
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数组了
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%,还有进步空间
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+?