bilibili笔试8.13,后端开发方向(Python)
选择题就不说了,本身记不住而且也不怎么会,就直接上编程题吧!
(1)4个数能否加减乘除得到24
给出四个数字问能否通过加减乘除得到24,如果能就返回TRUE,否则FALSE:7,2,1,10可以通过7*2+1*10得到。
随意安排四个数和三个位置的操作符,四个数的排列有4*3*2=24个,三个操作符的位置每个位置有4个选择,因此是4*4*4=64的方式,所以总共就是24*64=1536的可能性,4个数的数据比较弱,挨个检查每个可能性暴力就完事儿了。
def f(arr):
f = 0
f1 = lambda a, b : a + b
f2 = lambda a, b : a - b
f3 = lambda a, b : a * b
f4 = lambda a, b : a / b
acts = ['+', '-', '*', '/']
d = {'+':f1, '-':f2, '*':f3, '/':f4}
def dfs(curr, left):
nonlocal d, f, acts
if not left:
if curr == 24:
f += 1
return
for i in range(len(left)):
for act in acts:
dfs(d[act](curr, left[i]), left[i + 1:])
for i in range(len(arr)):
dfs(arr[i], arr[:i] + arr[i + 1:])
return f > 0
(2)括号是否平衡
leetcode原题不多说了吧。
def isValid(self, s: str) -> bool:
st = []
d = {')':'(', ']':'[', '}':'{'}
for c in s:
if c in d:
if st and st[-1] != d[c]:
return False
if st and st[-1] == d[c]:
st.pop()
if not st:
st.append(c)
else:
st.append(c)
return len(st) == 0
(3)找零钱
感觉是相对最简单的一道题,有1,4,16,64四种零钱和1000块,花掉N元之后求还需要找多少张,直接贪心就完事儿。
def f(N): a = [64, 16, 4, 1] res, left = 0, 1024 - N while left: if left < a[0]: a.pop(0) else: res += left // a[0] left -= a[0] * (left // a[0]) a.pop(0) return res
PS:前面两道题给的是输入输出的测试,本以为要自己定义输入输出结果发现后面给的是leetcode的形式,输入输出定义好了,所以前面的实例不知道加上去有什么用?
PPS:其实前俩题都输出的是布尔型的结果,第一题直接return True有57%的通过率;第二题如果括号长度为奇数返回False,长度为0返回True也能通过60%,以后时间不够就直接返回也是一种办法
#笔经##哔哩哔哩#
上海得物信息集团有限公司公司福利 1251人发布
查看10道真题和解析