2020年4月21日——Python
1.解题时,除了遍历图或者是树之外,一般可以试一下”枚举+选择“的模式:
将所有可能的结果全部排列出来,然后再使用if语句等进行选择
2.算出答案时,要记得验证
比如有四个不同的数字,组成一个乘法算式,它们的乘积仍然由这4个数字组成:
210*6=1260
8*473=3784
27*81=2187
求一共有多少种满足要求的算式。
当算出答案时,可以将所有的结果输出来,看看是否有重复的(因为乘法交换律)
3.将满二叉树存储到数组中:
则结点i(数组中下标为i的元素)的左孩子为:2*i+1;右孩子为:2*i+2:
4.满二叉树中,求树中结点的个数有两种方法:
(1)设n为树的深度(即层数),则结点数=2^n-1
(2)设n为树的叶子结点数,则结点数=2*n-1
5.sorted()内置函数只能对可迭代的对象进行排序
6.python中实现全排列的方法:
1 a=[]#存储全排列的结果
2 def allrange(x,s,e):#x为待全排列的列表([1,2,3,4]),s为列表的起始位置(0),e为列表的终止位置(3)
3 for m in range(s,e+1):
4 x[m],x[s]=x[s],x[m]#将下标为m的元素,依次后移,放在不同的位置上(m的起始为0时,有:[1,2,3,4];[2,1,3,4];[3,2,1,4];[4,2,3,1])
5 allrange(x,s+1,e)#进行迭代,从s+1的位置开始,进行全排列
6 x[m],x[s]=x[s],x[m]#归位(初始化)
7 if s==e:#函数出口
8 s=''
9 for i in x:
10 s=s+i
11 global a
12 if s not in a:#防止重复的出现
13 a.append(s)
14 print(a)
思想是:
[1,2,3] : [1]+[2,3] : [1,2]+[3] : [1,2,3]
[1,3]+[2] : [1,3,2]
[2]+[1,3] : [2,1]+[3] : [2,1,3]
[2,3]+[1] : [2,3,1]
[3]+[2,1] : [3,2]+[1] : [3,2,1]
[3,1]+[2] : [3,1,2]