LeetCode- 爬楼梯

115 阅读1分钟

思维还是跟不上呀,这么简单的递归,尽让想不出来,更别说其他的方法啦。要总结结果,然后在过程中看到规律呀。先用简单的方法做出来吧。

int climbStairs(int n) 
{
	if (n == 1) {
		return 1;
	} 
	if (n == 2) {
		return 2;
	}
	return climbStairs(n-1) + climbStairs(n-2);
}
// 这个算法会执行超市
int _climb(int n,int *arr) 
{
	if (arr[n]!= 0) return arr[n];
        // 记录已经算过的值
	arr[n] = _climb(n-1,arr) + _climb(n-2,arr);
	return arr[n];
}

int goodClimbStairs(int n) 
{
	if (n < 0) return 0;
	if (n <= 2) return 2;
        // C 库函数 **void *calloc(size_t nitems, size_t size)**  分配所需的内存空间,并返回一个指向它的指针。**malloc** 和 **calloc** 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
	int *arr = (int*)calloc(n,sizeof(int));
	arr[1] = 1;
	arr[2] = 2;
	return _climb(n,arr);
}
int main() {
	int res = climbStairs(10);
	printf("%d",res);
	return 0;
}

习题地址