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]

posted @ 2020-04-22 00:15  Tinero  阅读(155)  评论(0编辑  收藏  举报