题解 | 火车进站

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109?tpId=37&tags=&title=&difficulty=3&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&dayCountBigMember=365%E5%A4%A9

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

void dfs(const vector<int>& nums, int index, stack <int>& st, vector<int>& out,
         vector<vector<int>>& res) {
    //栈为空,全部进站并且全部出栈,可以返回至调用层函数
    if (index >= nums.size() && st.empty()) {
        res.push_back(out);
        return;
    }
    //进栈。当未全部进栈时可以进栈。进栈后再出栈
    if (index < nums.size()) {
        st.push(nums[index]);
        dfs(nums, index + 1, st, out, res);
        st.pop();
    }
    //出栈。当栈非空时可以出栈,
    //出栈后是一种可能,进行递归,
    //出栈后再进栈,相当于不出栈,也是一种可能。继续进栈(在上一层调用的函数中进行进栈),进行递归
    if (!st.empty()) {
        out.push_back(st.top());
        st.pop();
        dfs(nums, index, st, out, res);
        st.push(out.back());
        out.pop_back();
    }
}
int main() {
    int n;
    vector<vector<int>>res;
    stack <int>st;
    vector<int>out;
    while (cin >> n) {
        vector<int>nums(n);
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
        dfs(nums, 0, st, out, res);
        sort(res.begin(), res.end());
        for (auto& re : res) {
            for (auto& p : re) {
                cout << p << " ";
            }
            cout << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

#转行#
全部评论

相关推荐

07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务