• 入栈出栈的顺序问题


    题意
    某个字母序列,把这字母序列按顺序压入栈中,在任意过程,允许字符出栈,求所有的可能性
    思路
    模拟出栈入栈的过程,暴力枚举每一种情况。


    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <stack>
    #include <vector>
    using namespace std;
    int n;
    char str[1000];
    
    void dfs(stack<char> S, vector<char> ans, int cur)
    {
        if(cur == n && S.empty()) //边界输出结果
        {
            for(int i = 0; i < ans.size(); i++)
                printf("%c", ans[i]);
            puts("");
            return;
        }
        else if(cur == n && !S.empty()) //全部出栈到结果中
        {
            char ch = S.top();
            ans.push_back(ch);
            S.pop();
            dfs(S, ans, cur);
            S.push(ch);
            ans.pop_back();
            return;
        }
        if(!S.empty()) // 枚举出栈的个数
        {
            stack<char> nS = S;
            vector<char> nans = ans;
            while(!nS.empty())
            {
                nans.push_back(nS.top());
                nS.pop();
                nS.push(str[cur]);
                dfs(nS, nans, cur+1);
                nS.pop();
            }
        }
        //选择此次不出栈
        S.push(str[cur]);
        dfs(S, ans, cur+1);
        S.pop();
    }
    
    int main()
    {
        cin >> str;
        n = strlen(str);
        stack<char> S;
        vector<char> ans;
        dfs(S, ans, 0);
        return 0;
    }
    
  • 相关阅读:
    AirtestIDE基本功能(二)
    AirtestIDE基本功能(一)
    Pycharm Debug功能详解
    AirtestIDE环境安装
    leetcode-338. 比特位计数
    leetcode-401. 二进制手表
    leetcode-392. 判断子序列
    leetcode-155. 最小栈
    leetcode-111. 二叉树的最小深度
    leetcode-110. 平衡二叉树
  • 原文地址:https://www.cnblogs.com/Alruddy/p/7667072.html
Copyright © 2020-2023  润新知