鱼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 | 显示全部楼层
  1. def serialize(array):
  2.         levels_count = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}
  3.         last = 0
  4.         result = []
  5.         for each_box in array:
  6.                 level, title = each_box.split(' ')[0].count('#'), each_box.split(' ')[1]
  7.                 if level < last:
  8.                         for after_index in range(level+1, 7):
  9.                                 levels_count[after_index] = 0
  10.                 last = level
  11.                 levels_count[level] += 1
  12.                 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])
  13.                 result.append([string.replace(".0", ''), title])
  14.         return result

  15. # 测试效果
  16. >>> serialize(["# a", "# b", "## c", "### d", "# e", "## f"])
  17. [['1', 'a'], ['2', 'b'], ['2.1', 'c'], ['2.1.1', 'd'], ['3', 'e'], ['3.1', 'f']]
  18. >>>
  19. >>> serialize(["# a", "# b", "## c", "### d", "# e", "## f", "# g", "## h"])
  20. [['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, 2024-3-29 18:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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