本节博客用栈来解决判断一串数字是否是另一串数字的出栈结果,有需要借鉴即可。
1.题目
题目链接:LINK
2.题解
思路:模拟出栈过程
先入数据,再看看是不是这个数据与popV一致出掉,再继续入,直到入完数据。如果栈种还有剩余数据,则表明false,如果没有剩余数据,则代表true
图解如下:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pushV int整型vector * @param popV int整型vector * @return bool布尔型 */ bool IsPopOrder(vector<int>& pushV, vector<int>& popV) { // 先搞一个栈 stack<int> st; int push_i = 0, pop_i = 0; //开始入数据 while(push_i < pushV.size()) { st.push(pushV[push_i]); push_i++; //每次入完数据之后看看与删除的是否匹配,如果匹配就删除,不匹配继续入数据 while(!st.empty() && st.top() == popV[pop_i]) { pop_i++; st.pop(); } } //如果栈里还有数据,就代表false,如果栈刚好与popV抵消了,那就是true if(st.empty()) return true; else return false; } };
3.总结
这个题难点是思路,掌握了思路其实就很好写了。
EOF