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%,以后时间不够就直接返回也是一种办法
#笔经##哔哩哔哩#
全部评论
24点我一开始看到也是一头雾水,,,后来想想好像也没多少数据啊&hellip;直接来个全排列再dfs运算符&hellip;
点赞 回复 分享
发布于 2020-08-14 08:23
楼主是在四个数种选两个进行运算,结果扔回去,再选两数递归?
点赞 回复 分享
发布于 2020-08-14 00:02
第一题直接返回False,有48%,居然True要高一点诶😅
点赞 回复 分享
发布于 2020-08-13 21:34
第一题不考虑运算符优先级?
点赞 回复 分享
发布于 2020-08-13 21:26
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复 分享
发布于 2020-08-13 20:46

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
3
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务