2021Shopee通用笔试题(第二场)编程题代码解析

Shopee使用的是ACM赛制,但是数据要求确实LeetCode格式,所以处理数据的输入和输出比较麻烦,最后我选择了使用python来解题。

简单总结来说就是,写题3分钟,调格式1小时。

第一题:

简单的dp问题,从左上角走到右下角,每次只能向右或者向下走,求最小花费,状态转移方程为:dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]),把第一行和第一列进行初始化,防止进行越界判断的复杂处理。

raw = input()[1:-1].split("],")
raw[len(raw) - 1] = raw[len(raw) - 1][0:-1]
l = []
for s in raw:
    l.append(s[1:].split(','))

n, m = len(l), len(l[0])

for i in range(0, n):
    for j in range(0, m):
        l[i][j] = int(l[i][j])

for i in range(1, n):
    l[i][0] += int(l[i - 1][0])
for j in range(1, m):
    l[0][j] += int(l[0][j - 1])

for i in range(1, n):
    for j in range(1, m):
        l[i][j] += min(l[i - 1][j], l[i][j - 1])

print(l[n - 1][m - 1])

第二题:

版本号比较,把字符串按点号分割成数字,然后遍历即可。

num = input().split(',')
v1, v2 = num[0].strip()[1:-1], num[1].strip()[1:-1]
num1, num2 = v1.split('.'), v2.split('.')

flag = 0
for i in range(max(len(num1), len(num2))):
    s1 = int(num1[i]) if i < len(num1) else 0
    s2 = int(num2[i]) if i < len(num2) else 0
    if s1 > s2:
        flag = 1
        break
    elif s1 < s2:
        flag = -1
        break
print(flag)

第三题:

简单的二叉树层序遍历,因为给了二叉树的数组表示,那么我们直接利用第i个元素的子元素是i*2i*2+1,模拟一遍即可完成。

tree = input()[1: -1].split(',')
tree.insert(0, 0)
l = []

q = [1]

while len(q) != 0:
    size = len(q)
    tmp = []
    for i in range(size):
        idx = q.pop(0)
        tmp.append(int(tree[idx]))
        if idx * 2 < len(tree) and tree[idx * 2] != '#':
            q.append(idx * 2)
        if idx * 2 + 1 < len(tree) and tree[idx * 2 + 1] != '#':
            q.append(idx * 2 + 1)
    l.append(tmp)

ans = "["
for i in range(len(l)):
    ans += '['
    for j in range(len(l[i])):
        ans += str(l[i][j])
        if j != len(l[i]) - 1:
            ans += ','
    ans += "]"
    if i != len(l) - 1:
        ans += ','
ans += "]"
print(ans)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值