2021-07-31 箱子问题

2021-07-31  本文已影响0人  何几时

题意:侯同学助人为乐,帮同事搬家,把物品放进小箱子,再将小箱子放进大箱子,一段操作后侯同学忘了用几个箱子,请帮他算出箱子的个数?[]代表一个箱子,[]3代表3个箱子,[[]3]代表1个大箱子里放4个小箱子一共是4个箱子。


输入描述:
一行字符串boxea,代表箱子的摆放情况。(boxes长度len,2<=len<=10^6)
对于输入的箱子:
1、保证一定是完整的箱子[1,不会出现半个箱子[
2、保证箱子套箱子的层数dep,1<=dep<=10
3、[]x,2<=x<=9([]x见题意)
输出描述:
输出箱子的数量count。
1<=count<2^31


特殊样例
输入:[][][[[]3[]2]2]2
输出:28

import sys
from collections import deque

line = sys.stdin
line = line.strip()


q = deque()
cnt = 1
res = 0
total = 0
allTotal = 0
# 判断是不是平行
flag = False
for i in range(0, len(line) - 1):
    # 判断入不入栈
    if line[i] == ']':
        while q[-1] != '[':
            q.pop()
        q.pop()
    else:
        q.append(line[i])

    if line[i] == '[':
        res = 0
        flag = True
    if line[i] == ']':
        if not flag:
            res = total
        if line[i+1].isalnum():
            cnt = int(line[i+1])
            res = cnt * res + cnt
        else:
            res += 1
        if flag:
            total += res
        else:
            total = res
        flag = False

    if len(q) == 0:
        allTotal += total
        total = 0

# 如果结尾不是以数字而是 ] 结尾
if total != 0:
    allTotal += res
    allTotal += 1

print(allTotal)
上一篇下一篇

猜你喜欢

热点阅读