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%,以后时间不够就直接返回也是一种办法
#笔经##哔哩哔哩#