文章
1
粉丝
72
获赞
1
访问
1.1k
递归,每次计算addr地址中能分隔出num段地址的数目。python代码供参考:
自己造的数据是都没有问题,请大佬批评指正。
#encoding:utf-8
def calc(addr, num):
# 计算addr地址中能分隔出num段地址的数目(也是递归结束条件)
if len(addr) > 3*num or len(addr) < num or num<1:
return 0
# 尝试前三位
ret = 0
if num==1:
if len(addr) == len(str(int(addr))) and int(addr) >=0 and int(addr) <= 255:
return 1
for i in range(1, min(3+1, len(addr)+1)):
nowBlock = addr[:i]
# 检查是否0打头
if len(nowBlock) != len(str(int(nowBlock))):
continue
# 检查数值范围
if not(int(nowBlock) >=0 and int(nowBlock) <= 255):
continue
# 递归
lastBlock = addr[i:]
tmp_ret = calc(lastBlock, num-1)
# 确保后面符合要求,这前边的1才能加上
if tmp_ret > 0:
ret += tmp_ret
return ret
if __name__ == "__main__":
n = int(input())
for i in range(n):
addr = str(input())
...
登录后发布评论
暂无评论,来抢沙发