猿辅导7.30日笔试编程题

1、叠箱子问题
#include <iostream>
#include <vector>
#include <stack>

using namespace std;

int countNum(string input) {
    //用栈解决,0代表箱子左边缘'['
	stack<int> stk;
	int length = input.length();
	int i = 0;
	while (i < length) {
		char cur = input[i];
        //左边缘入栈0
		if (cur == '[') {
			stk.push(0);
		}
        //右边缘出栈中间的元素以及左边缘0
		else if (cur == ']') {
            //栈内数字代表有多少个箱子,如果有多个数字就是相加
			int count = 0;
			while (stk.top() != 0) {
				int temp = stk.top();
				stk.pop();
				count += temp;
			}
            //左边缘出栈
			int left = stk.top();
			stk.pop();
            //外部的箱子也得算一个
			count += 1;
            //将一对箱子内的总数入栈
			stk.push(count);
		}
        //数字,代表有多个
		else {
			int num = input[i] - '0';
            //出栈
			int bef = stk.top();
			stk.pop();
            //如果是左边界,直接把数字入栈,相当于数字乘1
			if (bef == 0)
				stk.push(num);
            //如果是数字,代表内部有嵌套箱子,相乘后入栈
			else
				stk.push(num * bef);
		}
        //前进一个字符
        i++;
	}
    //完成后栈内可能有多个数字,对应 "[][][]"这种非嵌套类型
	int num = 0;
    //弹栈计算总和
	while (!stk.empty()) {
		num += stk.top();
		stk.pop();
	}
	return num;
}

int main() {
	string input;
	cin >> input;
	int result = countNum(input);
	cout << result << endl;
	return 0;
}


#猿辅导笔试讨论##笔试题目##猿辅导#
全部评论
题目是啥呀
点赞 回复 分享
发布于 2021-08-01 11:30

相关推荐

大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务