leetcode70题 题解 翻译 C语言版 Python版
2016-02-13 17:21
555 查看
70. Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
70.爬楼梯
你现在在爬一个楼梯,到顶一共是n步。
每次你能上一步或者上两步。那么你能有多少种不同的方式爬到顶呢?
思路:这题很明显使用递归解决。判断n需要多少步时只需要将n-1的步数及n-2的步数相同即可。递归的终点是n为1或n为2时,n为1时返回1,n为2时返回2。不过这题在leetcode上使用递归提交的话会遇到超时的问题,显然出题者不希望我们用递归去解决。因为递归都能转化成循环结构,所以我们尝试用一个简单的循环来解决此题。用递归时思想是从高台阶往低台阶一阶阶的往下推,然后从低台阶到高台阶一阶阶的递归返回得到结果。基于这种思想我们在设计循环时应该把握低台阶到高台阶递归式的办法。比如说,当前要求5阶,那么从1阶开始推2阶,再推3阶,一阶阶推到5阶。限于题意,此题应当两阶两阶的向上推。那么可以想像到,我们保留第n-2阶的步数种类为p,保留n-1阶的步数种类为q,那么当前n阶的步数种类就是t=p+q,那么进入下一个循环我们要面对的是n-1阶和n阶去推导n+1阶的步数种类,所以要将n-1阶的步数种类设成p,n阶的步数种类设成q,然后进行下一步的推导。这中间有一个变量传递的问题,需要认真理解。
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
70.爬楼梯
你现在在爬一个楼梯,到顶一共是n步。
每次你能上一步或者上两步。那么你能有多少种不同的方式爬到顶呢?
思路:这题很明显使用递归解决。判断n需要多少步时只需要将n-1的步数及n-2的步数相同即可。递归的终点是n为1或n为2时,n为1时返回1,n为2时返回2。不过这题在leetcode上使用递归提交的话会遇到超时的问题,显然出题者不希望我们用递归去解决。因为递归都能转化成循环结构,所以我们尝试用一个简单的循环来解决此题。用递归时思想是从高台阶往低台阶一阶阶的往下推,然后从低台阶到高台阶一阶阶的递归返回得到结果。基于这种思想我们在设计循环时应该把握低台阶到高台阶递归式的办法。比如说,当前要求5阶,那么从1阶开始推2阶,再推3阶,一阶阶推到5阶。限于题意,此题应当两阶两阶的向上推。那么可以想像到,我们保留第n-2阶的步数种类为p,保留n-1阶的步数种类为q,那么当前n阶的步数种类就是t=p+q,那么进入下一个循环我们要面对的是n-1阶和n阶去推导n+1阶的步数种类,所以要将n-1阶的步数种类设成p,n阶的步数种类设成q,然后进行下一步的推导。这中间有一个变量传递的问题,需要认真理解。
int climbStairs(int n) { if (n < 3) return n; int p = 1; int q = 2; for (int i = 0; i < n - 2; i++){ int t = p + q; p = q; q = t; } return q; }
class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ if n < 3: return n p, q = 1, 2 for i in range(n-2): p, q = q, p+q return q
相关文章推荐
- C++对象的赋值和复制
- Windows 下免费的 C++ 开发平台 EasilyGCC 正式发布
- c++11 新特性之 autokeyword
- C++对象的动态建立和释放
- 【C语言】C语言static和extern区别
- 【C语言】C语言static和extern区别
- 【C语言】C语言外部变量和内部变量
- 【C语言】C语言外部变量和内部变量
- 【C语言】C语言局部变量和全局变量
- usaco 2.2.3 runround
- C++实现线程同步的几种方式
- C/C++语言复习一
- usaco 2.1.1 castle
- usaco 2.1.2 frac1
- usaco 1.5.3 sprime
- 使用c语言编写程序:不允许创建第三方变量
- 单片机C语言 串口传输 结构体
- C++共用数据的保护
- C语言memset详解
- C++中引用和指针的区别