求解走楼梯算法
2018-01-19 13:19
225 查看
问题:楼梯总共有10级,每次只能走1级或者2级,求总共有多少种走法
求解思路:走到第10级,只有2种方式 8->10 ;9->10 所以 第10级=第9级+第8级 ;以此类推
求解方法1:
/**
*递归法求解 时间复杂度:O(2^n) 空间复杂度:5
* */
static int Method_1(int n)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
return Method_1(n - 1) + Method_1(n-2);
}
求解方法2:
/**
* 备忘录法求解 【优化递归】
* */
static int Method_2(int n,Dictionary<int,int> keys)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
if (keys.Keys.Contains(n))
{
return keys
;
}
else
{
int temp = Method_2(n - 1, keys) + Method_2(n-2,keys);
keys.Add(n,temp);
return temp;
}
}
求解方法3:
/**
* 动态规划,求解
*
* **/
static int Method_3(int n)
{
int a = 1;
int b = 2;
int temp;
for(int i = 3; i <= n; i++)
{
temp = a + b;
a = b;
b = temp;
}
return b;
}
求解思路:走到第10级,只有2种方式 8->10 ;9->10 所以 第10级=第9级+第8级 ;以此类推
求解方法1:
/**
*递归法求解 时间复杂度:O(2^n) 空间复杂度:5
* */
static int Method_1(int n)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
return Method_1(n - 1) + Method_1(n-2);
}
求解方法2:
/**
* 备忘录法求解 【优化递归】
* */
static int Method_2(int n,Dictionary<int,int> keys)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
if (keys.Keys.Contains(n))
{
return keys
;
}
else
{
int temp = Method_2(n - 1, keys) + Method_2(n-2,keys);
keys.Add(n,temp);
return temp;
}
}
求解方法3:
/**
* 动态规划,求解
*
* **/
static int Method_3(int n)
{
int a = 1;
int b = 2;
int temp;
for(int i = 3; i <= n; i++)
{
temp = a + b;
a = b;
b = temp;
}
return b;
}
相关文章推荐
- 贪心算法求解问题的选择准则
- 弗洛伊德(Floyd)算法求解图的最短路径
- 算法之美——求解 字符串间最短距离(动态规划)
- 【寒江雪】算法导论——矩阵链乘的动态规划求解
- DLX算法求解精确覆盖问题
- HDU 2041--超级楼梯(递推求解)
- A* 算法求解最短路径
- 考研中的算法时间复杂度求解
- TarJan 算法求解有向连通图强连通分量
- 机器学习笔记八 - SVM(Support Vector Machine,支持向量机)的剩余部分。即核技法、软间隔分类器、对SVM求解的序列最小化算法以及SVM的一些应用
- 求解极值的数值算法
- 全面解析回溯法:算法框架与问题求解
- 如何使用拓展欧几里得算法求解模线性方程组(详解)
- 算法框架与问题求解
- 华容道算法和使用广度搜索的一些单人游戏求解框架
- Topcoder SRM 701 算法分析求解
- 【算法设计与数据结构】URAL 1183.Brackets Sequence(区间dp求解)
- 最大子序问题求解算法 笔记
- 求最大子数组的和,算法导论之分治递归求解,暴力求解,记忆扫描方法。
- (转)Gauss消元算法求解开关灯问题