首页 > 其他分享 >对于1-n,输出它们所有可能的出栈顺序

对于1-n,输出它们所有可能的出栈顺序

时间:2024-08-23 20:53:19浏览次数:7  
标签:输出 顺序 出栈 index 数组 input output curnums

递归+回溯

返回条件

当前遍历完了整个原始数组,并且存留栈为空

if (index == input.size() && s.empty()) {
    for (int i = 0; i < output.size(); i++) {
        cout << output[i] << " ";
    }
    cout << endl;
    return;
}

递归

当存留栈不为空时,就可以开始输出元素

if (!s.empty()) {
    int top = s.top();
    s.pop();
    output.push_back(top);
    generateSequences(input, output, s, index);
    output.pop_back();
    s.push(top);
}

如果存留栈为空,就可以压入下一个元素

if (index < input.size()) {
    s.push(input[index]);
    generateSequences(input, output, s, index + 1);
    s.pop();  // 回溯
}

整个递归函数

当原始数组遍历完(使用下标来判断)并且此时栈为空,那么就可以输出一个结果。
当还没有遍历完,且栈不为空,就可以将结果弹出到输出数组里面留存。
当栈为空,且原始数组没有遍历完,当前元素之前的所有情况已经存储,可以向后添加元素准备下一个结果了

void generateSequences(vector<int>& input, vector<int>& output, stack<int>& s, int index) {
    if (index == input.size() && s.empty()) {
        for (int i = 0; i < output.size(); i++) {
            cout << output[i] << " ";
        }
        cout << endl;
        return;
    }

    if (!s.empty()) {
        int top = s.top();
        s.pop();
        output.push_back(top);
        generateSequences(input, output, s, index);
        output.pop_back();
        s.push(top);
    }

    if (index < input.size()) {
        s.push(input[index]);
        generateSequences(input, output, s, index + 1);
        s.pop(); 
    }
}

判断一个数组是不是出栈数组

nums为我们输入的1-n构成的1,2,...., n数组
curnums则是我们需要判断的数组
原理:利用stack去存储nums的数据,每次存储判断当前top是否与curnums的当前下标相同,如果相同,则pop,然后移动curnums的下标,直到遍历完整个数组
如果curnums是一个合理的出栈数组,那么最后这个栈应该为空,因为s模拟的就是元素入栈出栈的过程。

bool isValidPopSequence(vector<int>& nums, vector<int>& curnums) {
    stack<int> s;
    int j = 0;

    // 遍历每个入栈元素
    for (int i = 0; i < nums.size(); ++i) {
        s.push(nums[i]);
        // 检查栈顶元素是否和出栈序列中的下一个元素相同
        while (!s.empty() && s.top() == curnums[j]) {
            s.pop();
            ++j;  // 移动到下一个要匹配的出栈元素
        }
    }

    // 如果所有元素都能成功匹配,则是一个有效的出栈序列
    return s.empty();
}

标签:输出,顺序,出栈,index,数组,input,output,curnums
From: https://www.cnblogs.com/XTG111/p/18377075

相关文章

  • 回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序 多
    回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序多特征输入单输出CNN-LSTM-Attention文章目录前言回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序多特征输入单输出CNN-LSTM-Attention一、CNN-......
  • 回归预测|基于北方苍鹰优化-卷积神经网络-双向长短期记忆网络-自注意力机制的数据回归
    **回归预测|基于北方苍鹰优化-卷积神经网络-双向长短期记忆网络-自注意力机制的数据回归预测Matlab程序多特征输入单输出含基础模型NGO-CNN-BiLSTM-Attention**文章目录前言回归预测|基于北方苍鹰优化-卷积神经网络-双向长短期记忆网络-自注意力机制的数据回归预测M......
  • 回归预测|基于NGO-TCN-BiGRU-Attention的数据预测Matlab程序 多特征输入单输出 含基础
    回归预测|基于NGO-TCN-BiGRU-Attention的数据预测Matlab程序多特征输入单输出含基础模型文章目录前言回归预测|基于NGO-TCN-BiGRU-Attention的数据预测Matlab程序多特征输入单输出含基础模型一、NGO-TCN-BiGRU-Attention模型NGO-TCN-BiGRU-Attention模型详细流......
  • C# Json格式化换行输出
    publicstaticstringJsonBeauty(thisstringinput,boolarrayWrap=false,stringindents=""){voidAppendIndent(StringBuildersb,intcount,stringindents){for(;count>0;--count)sb.Append(indents);}varoutput=newSt......
  • STM32学习记录-05 -2-TIM输出比较
    1输出比较简介OC(OutputCompare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能2......
  • CNN-BiLSTM-Attention(12种算法优化CNN-BiLSTM-Attention多输入单输出)
     12种算法优化CNN-BiLSTM-Attention模型预测的代码。其中Attention模型可以改为单头或者多头,在代码中就是改个数字而已。代码注释已写好如何更改。12种算法优化CNN-BiLSTM-Attention多特征输入单步预测代码获取戳此处代码获取戳此处代码获取戳此处主要功能为:采用12种......
  • 【408DS算法题】022基础-递增输出单链表中的结点值
    Index题目分析实现总结以上内容稍后补全,以下内容来自https://blog.csdn.net/weixin_60702024/article/details/141336041题目分析实现总结分析题目给定单链表的头结点,按照递增的顺序,输出单链表结点的值。分析实现具体实现如下:总结注意delete执行后,只会将......
  • I/O(输入/输出)——字节流和字符流
    一、字节流    在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制的形式(也就是字节)存在的。为字节的输入输出流提供的一系列流统称为字节流。在JDK中提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类。1.InputStream    Inpu......
  • 数据结构day03(栈 Stack 顺序栈、链式栈 )内含具体详细代码实现
    目录【1】栈 Stack1》栈的定义 2》顺序栈 2》链式栈 4》顺序栈的链式栈的区别【1】栈 Stack1》栈的定义栈:是只允许在一端进行插入或删除的线性表,首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶:线性表允许进行插入删除的一端......
  • HT4832耳机放大器33mw免输出电容立体声耳机放大器
    ■特点无需大尺寸输出隔直电容以0V电位为参考输出;出色的低频表现:静态电流:3.6mA(PVDD=3.6V,Output=floating)关断电流:0.1uA单端或差分输入 内置输入电阻减少外部元器件数量系统噪声性能优良THD+N仅为:0.014%(3.6V,32ohm,20mw)功率输出:33mW(PVDD=3.6V,RL=32......