牛客网学习笔记——中等题们

HJ63 DNA序列

在这里插入图片描述
在这里插入图片描述

def find(s):
    re = 0
    for i in range(len(s)):
        if s[i] == 'G' or s[i] == 'C':
            re += 1
    return re 
    
while True:
    try:
        s = input()
        n = int(input())
        re = 0
        res = ''
        for i in range(len(s)-n+1):
            re_ = find(s[i:i+n])
            res_ = s[i:i+n]
            if re_ > re:
                res = res_
                re = re_
        print(res)
    except:
        break

HJ43 迷宫问题

在这里插入图片描述
在这里插入图片描述

def walk(i,j,pos):
    if j+1<n and maze[i][j+1] == 0:
        if (i,j+1) not in pos:
            walk(i,j+1,pos+[(i,j+1)])
    if j-1 >= 0 and maze[i][j-1] == 0:
        if (i,j-1) not in pos:
            walk(i,j-1,pos+[(i,j-1)])
    if i+1<m and maze[i+1][j] == 0:
        if (i+1,j) not in pos:
            walk(i+1,j,pos+[(i+1,j)])
    if i-1 >= 0 and maze[i-1][j] == 0:
        if (i-1,j) not in pos:
            walk(i-1,j,pos+[(i-1,j)])
    if (i,j) == (m-1,n-1):
        for p in pos:
            print('(' + str(p[0]) + ',' + str(p[1]) + ')')

while True:
    try:
        m, n = list(map(int, input().split()))
        maze = []
        for _  in range(m):
            maze.append(list(map(int, input().split())))

        pos = [(0,0)]
        walk(0,0,pos)
    except:
        break

学习大佬写的

while True:
    try:
        n, m = [int(x) for x in input().split()]
        maze = []
        for i in range(n):
            maze.append([int(x) for x in input().split()])

        points = []
        for i in range(n):
            points.append([])
            for j in range(m):
                points[i].append(0)

        path = []

        def get_points(i,j,maze,points):
        #     print('test3',i,j)
            k = []
            if(0 <= i+1 < n and maze[i+1][j] == 0 and points[i+1][j] == 0):
                k.append([i+1,j])
            if(0 <= i-1 < n and maze[i-1][j] == 0 and points[i-1][j] == 0):
                k.append([i-1,j])
            if(0 <= j+1 < m and maze[i][j+1] == 0 and points[i][j+1] == 0):
                k.append([i,j+1])
            if(0 <= j-1 < m and maze[i][j-1] == 0 and points[i][j-1] == 0):
                k.append([i,j-1])
        #     print('test4',k)
            return k

        def get_path(i,j,maze,path,points):
            global res
            k = get_points(i,j,maze,points)
            points[i][j] = 1
        #     print('test2',k)
            if(len(k) > 0):
                for num1 in range(len(k)):
                    if(num1 == 0):
                        path.append(k[num1])
                    else:
                        path[-1] = k[num1]
                    if(k[num1] == [n - 1,m - 1]):
                        if(len(res) == 0 or len(path) < len(res)):
                            res = path
                    else:
                        tpath = path.copy()
                        tpoints = points.copy()
        #                 print('test1',tpath,tpoints)
                        get_path(k[num1][0],k[num1][1],maze,tpath,tpoints)

        global res
        res = []

        get_path(0,0,maze,path,points)

        print('(0,0)')
        for num2 in range(len(res)):
            print('(%d,%d)'%(res[num2][0],res[num2][1]))
    except:
        break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值