华为笔试

前两个AC了,最后一个只过了36%,不知道怎么优化

第一题

def solution(s):
    res1 = s.split()[1:]
    res1 = [i for i in res1 if i]
    res2 = []
    for subs in res1:
        if len(subs) <= 8:
            res2.append(subs + "0"*(8-len(subs)))
        else:
            while len(subs) > 8:
                res2.append(subs[:8])
                subs = subs[8:]
            res2.append(subs + "0"*(8-len(subs)))
    res2.sort()
    return " ".join(res2)

s = input()
print(solution(s))

第二题

def solution(s):
    if not s:
        return ""
    num_set = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    dic = {")": "(", "]": "[", "}": "{"}
    while s[0] in dic.values():
        s = s[1:-1]
    n = len(s)
    stack = []
    for i in range(n):
        if s[i] not in dic:
            stack.append(s[i])
        else:
            left = dic[s[i]]
            curs = ""
            while stack[-1] != left:
                curs += stack.pop()
            stack.pop()
            curnum = ""
            while stack and stack[-1] in num_set:
                curnum += stack.pop()
            curnum = int(curnum[::-1])
            curres = curs * curnum
            stack += curres.split()
    return "".join(stack[::-1])

s = input()
print(solution(s))

第三题

def solution(a, b, array, n, m):
    if not array:
        return 0
    res = process(a[0], a[1], array, n, m, b[0], b[1])
    return res


def process(i, j, array, n, m, aimi, aimj):
    if i == aimi and j == aimj:
        return 1
    res = 0
    if i - 1 > 0 and array[i-1][j] > array[i][j]:
        res += process(i-1, j, array, n, m, aimi, aimj)
    if i + 1 < n and array[i+1][j] > array[i][j]:
        res += process(i+1, j, array, n, m, aimi, aimj)
    if j - 1 > 0 and array[i][j-1] > array[i][j]:
        res += process(i, j-1, array, n, m, aimi, aimj)
    if j + 1 < m and array[i][j+1] > array[i][j]:
        res += process(i, j+1, array, n, m, aimi, aimj)
    return res


nm = input().split()
n, m = int(nm[0]), int(nm[1])
array = []
for i in range(n):
    line = input().split()
    line = list(map(int, line))
    array.append(line)
ab = list(map(int, input().split()))
a = ab[:2]
b = ab[2:]
print(solution(a, b, array, n, m))
#华为##笔试题目##题解#
全部评论
你面什么岗?
点赞 回复
分享
发布于 2019-04-10 23:25
第三题i-1>0是不是要改成i>0,还有j也是。感觉第一行和第一列并没有参与计算。
点赞 回复
分享
发布于 2019-04-11 00:59
联易融
校招火热招聘中
官网直投
第一题我只过了80老哥能帮我看下吗
点赞 回复
分享
发布于 2019-04-11 08:59
大神你好,请问第二题24行 为什么 stack += curres.split() 用stack += curres代替,可以吗
点赞 回复
分享
发布于 2019-04-15 23:18
大神,可以麻烦描述一下题目么,谢谢
点赞 回复
分享
发布于 2019-04-17 11:25

相关推荐

点赞 29 评论
分享
牛客网
牛客企业服务