C代码
int fib(int n){
int *dp = NULL;
int i;
int ret = 0;
if(n < 2) {
return n;
}
dp = calloc(n+1, sizeof(int));
dp[0] = 0;
dp[1] = 1;
for (i = 2; i < n+1; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
ret = dp[n];
free(dp);
return ret;
}
结果
注意点
- 注意处理 n < 2的情况;
优化内存使用
内存空间由原来的o(n)优化为o(3)
#define ARRSIZE ((1 << 2)-1)
int get_index(int i) {
return i % ARRSIZE;
}
int fib(int n){
int *dp = NULL;
int i;
int ret = 0;
if(n < 2) {
return n;
}
dp = calloc(ARRSIZE, sizeof(int));
dp[0] = 0;
dp[1] = 1;
for (i = 2; i < n+1; i++) {
dp[get_index(i)] = dp[get_index(i-1)] + dp[get_index(i-2)];
}
ret = dp[get_index(n)];
free(dp);
return ret;
}
题目
|