这或许是东半球讲十大排序算法最好的一篇文章
动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)
其实排序算法只要掌握快排就好了,别搞那么花哨ok?
动态规划入门
一文看懂递归
递归练习(自我调用)
1.青蛙咋跳?
一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。 跳上第 2
级台阶有两种跳法:每次跳 1 级,跳两次;或者一次跳 2 级。 问要跳上第 n 级台阶有多少种跳法?
递推关系:
def numWays(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
return numWays(n - 1) + numWays(n - 2)
print(numWays(7))
# 进阶,优化空间(这样应该直接就算是动态规划了吧)自下而上了
def numWays(n):
dp=[0]*(n+1)
dp[0]=1
dp[1]=1
dp[2]=2
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[n]
2.反转二叉树
leetcode 226. 翻转二叉树
#递归方法
def invertTree( root):
if root is None:
return
tem=root.leftchild
root.leftchild=invertTree(root.rightchild)
root.rightchild=invertTree(tem)
return root
print(invertTree(r))
3.汉诺塔
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
找递推关系时,切忌把子问题层层展开,这样会把自己绕晕,只要找到一层问题与它的子问题的关系用递归表示即可.
解法:
- 把上层n-1个圆盘从a经由c移到b
- 把剩下最后一个圆盘直接从a移到c
- 把b上面的n-1个圆盘从b经a移到c
def hanno(n,a,b