算法应该是对的,py正式考试给10s。。现在只有1s
题目的解答方法试题中已经给出,主要考察实现,分三步:
排序
去重一
去重二
其中,个人认为判断子集,同级合并是难点(去重二),但是同级合并实际上有点类似2048,其实利用栈就很好理解了。
而判断子集:实际上就是 如果两个的ip前缀信息只看有效位(/后面数字的长度),如果相等,就是子集了
而同级合并:我认为是,如果两个的ip前缀信息只看有效位-1的,他们相等,就能合并了。。原因也比较简单
比如我门用一共长8位的ip地址来表示
1100 XXXX(前缀长度4) 11000000 11001111 192,207
1101 XXXX(前缀长度4) 11010000 11011111 208,237
显然他可以表示 110X XXXX,显然,它的ip地址是和1100 相等的
列表里0,1,2,3,4分别是ip第一位第二位第三位第四位,和ip前缀长度,列表[5]是ip地址对应的二进制数
def isSubSet(a,b):
#功能:判断b是a的子集,只需要看二者的前缀是否相等
if a[0]*16777216+a[1]*65536+a[2]*256+a[3]>>(32-a[4]) ==b[0]*16777216+b[1]*65536+b[2]*256