鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 孤独的嫖客

[面试题]难度中级,来挑战一下吧

[复制链接]
发表于 2021-4-12 20:01:07 | 显示全部楼层
qiuyouzhi 发表于 2021-4-12 17:55
蛤? 我测试了下我的代码,貌似并没有问题

代码完全没问题呀!只是我的理解跟不上的问题,哈哈哈。
感谢大佬。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-13 20:36:30 | 显示全部楼层
本帖最后由 丨游戏灬需要 于 2021-4-13 21:19 编辑

cy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 01:35:25 | 显示全部楼层
本帖最后由 丨游戏灬需要 于 2021-4-14 02:39 编辑

这次应该对了 .listData3 我就不验算了 ,逻辑在try_know那
确实难(也确实因为我本身就没干过编程) .花了我一整天才想出.....所以我确菜了

class A():
        class Simulation():
                def __init__(self):
                        self.listResult =[]
                        self.listHead =[]

                def try_know(self):
                        return '''例如:['# a', '## b', '### c' ,'## d' ,'### e' ,'# f' ,'### g']
                        相当于:
                        # a
                                ## b
                                        ### c
                                ## d
                                        ### e
                        # f
                                        ### g
                        操作的话:
                        进入 ,创建
                                进入 ,创建
                                        进入 ,创建
                                后退 ,创建
                                        进入 ,创建
                        退后 ,退后 ,创建
                                        进入 ,进入 ,创建
                        结果的话:
                        ['1' ,'a']
                                ['1.1' ,'b']
                                        ['1.1.1' ,'c']
                                ['1.2' ,'d']
                                        ['1.2.1' ,'e']
                        ['2' ,'f']
                                        [2.1.1 ,'g']
                        所以 :
                        当前层最高 :listHead[-1] +=1
                        进入 :listHead.append(1)
                        后退 :listHead.pop()
                        创建 :listResult.append(['.'.join(map(str,listHead)) ,value])
                        如果要进入: 进入*n ,创建
                        如果要返回: 返回*n ,当前 ,创建
                        如果同层:当前 ,创建

                        '''

                def peer(self):
                        '''指向当前最高层'''
                        self.listHead[-1] +=1

                def entry(self):
                        '''进入'''
                        self.listHead.append(1)

                def back(self):
                        '''后退'''
                        self.listHead.pop()

                def create(self ,value):
                        '''创建'''
                        self.listResult.append(['.'.join(map(str ,self.listHead)) ,value])

                def get_rsult(self):
                        return self.listResult

        def __init__(self):
                self.listData1 =['#a' ,'##b' ,'##c' ,'###d' ,'#e']
                self.listData2 =['# a', '## b', '### c' ,'## d' ,'### e']
                self.listData3 =['# a', '## b', '### c' ,'## d' ,'### e' ,'# f' ,'### g']
                self.listData4 =['# a', '## b', '## c', '### d', '### e', '### f', '## g','### h','# i', '## j', '## k', '### l', '#### m','#### n', '### o', '# p','## q', '### r', '### s','## t', '### u', '# v', '## w', '### x','### y','## z']

        def try_knowSimulation(self):
                self.Simulation().try_know()

        def try_know(self):
               return '''
               对比#数量 ,
               如果现在的比上一个的数量多几个 ,说明是进入几个
               如果现在的比上一个的数量少几个 ,说明是后退几个
               如果数量相等 ,说明是同层建立
               '''

        def test(self ,listChooseData):
                oldHead =''
                temp =self.Simulation()
                for info in listChooseData:
                        newHead ,value =self.split(info)
                        newHeadNum =newHead.count('#')
                        oldHeadNum =oldHead.count('#')
                        if newHeadNum >oldHeadNum:
                                for time in range(newHeadNum -oldHeadNum):
                                        temp.entry()
                                temp.create(value)
                                oldHead =newHead
                        elif newHeadNum <oldHeadNum:
                                for time in range(oldHeadNum -newHeadNum):
                                        temp.back()
                                temp.peer()
                                temp.create(value)
                                oldHead =newHead
                        elif newHeadNum ==oldHeadNum:
                                temp.peer()
                                temp.create(value)
                                oldHead =newHead

                return temp.get_rsult()

        def split(self ,strObj):
                '''分割#和value'''
                flag_ ,value =strObj.rsplit('#' ,1)
                flag =flag_ +'#'
                return [flag ,value]


a =A()
# print(a.try_know())
print(a.test(a.listData1))
print(a.test(a.listData2))
print(a.test(a.listData3))
print(a.test(a.listData4))

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
孤独的嫖客 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-15 18:19:42 | 显示全部楼层
def serialize(array):
        levels_count = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}
        last = 0
        result = []
        for each_box in array:
                level, title = each_box.split(' ')[0].count('#'), each_box.split(' ')[1]
                if level < last:
                        for after_index in range(level+1, 7):
                                levels_count[after_index] = 0
                last = level
                levels_count[level] += 1
                string = '%d.%d.%d.%d.%d.%d' % (levels_count[1], levels_count[2], levels_count[3], levels_count[4], levels_count[5], levels_count[6])
                result.append([string.replace(".0", ''), title])
        return result

# 测试效果
>>> serialize(["# a", "# b", "## c", "### d", "# e", "## f"])
[['1', 'a'], ['2', 'b'], ['2.1', 'c'], ['2.1.1', 'd'], ['3', 'e'], ['3.1', 'f']]
>>> 
>>> serialize(["# a", "# b", "## c", "### d", "# e", "## f", "# g", "## h"])
[['1', 'a'], ['2', 'b'], ['2.1', 'c'], ['2.1.1', 'd'], ['3', 'e'], ['3.1', 'f'], ['4', 'g'], ['4.1', 'h']]
随便写了一下,流程图见此
标题层级打印(面试题实例).png

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
孤独的嫖客 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-17 00:16:53 | 显示全部楼层
qiuyouzhi 发表于 2021-4-11 22:11
草草撸了一个

明天用 Golang 写一个

羡慕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表