java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...

import java.util.Stack;

public class ReverseStackRecursive {

/**

* Q 66.颠倒栈。

* 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。

* 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。

*1. Pop the top element

*2. Reverse the remaining stack

*3. Add the top element to the bottom of the remaining stack

*/

public static void main(String[] args) {

ReverseStackRecursive r=new ReverseStackRecursive();

Stack stack=new Stack();

for(int i=0;i<10;i++){

stack.add(i);

}

r.printStack(stack);

r.reverseStack(stack);

r.printStack(stack);

}

public void reverseStack(Stack stack){

if(!stack.empty()){

Integer top=stack.pop();

reverseStack(stack);

addToBottom(stack,top);

}

}

public void addToBottom(Stack stack,Integer ele){

if(stack.empty()){

stack.push(ele);

}else{

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

}

}

public void printStack(Stack stack){

/*

while(!stack.empty()){

System.out.print(stack.pop()+",");

}

*/

//we don't remove the elements in the stack.

for(Integer x:stack){

System.out.print(x+",");

}

System.out.println();

}

}

0

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-03-08 20:41

浏览 4504

评论

4 楼

bylijinnan

2012-10-13

neyshule 写道

这样做貌似还不如直接把栈倒到一个queue或是list里面再往回填。。空间复杂度都是n啊,这个算法每次都要开辟一个integer,而且递归还更废不是吗?

从效率上来说的确是那样的

但这道题目是考察递归吧 题目明确规定是 用递归颠倒一个栈

2fd2d9c1d175d11752585fa9b76aba29.gif

3 楼

neyshule

2012-10-13

neyshule 写道

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

代码都不对吧,你想一下别扭吗?

不好意思是对的,看错了。。

2 楼

neyshule

2012-10-13

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

代码都不对吧,你想一下别扭吗?

1 楼

neyshule

2012-10-13

这样做貌似还不如直接把栈倒到一个queue或是list里面再往回填。。空间复杂度都是n啊,这个算法每次都要开辟一个integer,而且递归还更废不是吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis DeskTop Manager 使用教程

redis desktop manager windows 是一款能够跨平台使用的开源性redis可视化工具。 redis desktop manager主要针对redis开发设计&#xff0c;拥有直观强大的可视化界面&#xff0c;具有完善全面的数据操作功能&#xff0c;可以针对目标key执行rename&#xff0c;delete&#xf…

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较 5.2 基于超像素的区域分割 超像素图像分割基于依赖于图像的颜色信息及空间关系信息&#xff0c;将图像分割为远超于目标个数、远小于像素数量的超像素块&#xff0c;达到尽可能保留图像中所有目标的边缘信息的目的…

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 Mean Shift

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

在线答题系统

使用Jquery制作了一个在线答题系统 功能分析 1.开始界面 2.结束界面 3.题目的内容和选项的选择 4.题目的切换 5.分数的计算 6.判断是否选中选项 效果演示 代码演示 一 . html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht…

【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

element 搜索匹配_分享一个element-ui级联选择器的搜索问题,顺便问下有没有解决方案。...

楼主做的是一个三级联动的城市筛选&#xff0c;后台给过来的数据并不全是按照label, value, children的key给到我&#xff0c;数据格式但是官方的props只能指到一级&#xff0c;具体指到2-3级我还不没弄明白。于是 &#xff0c; 需要自己转换:options"options"v-mode…

【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法(框选前景)

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

点击出现小心心

使用鼠标的点击事件&#xff0c;使用鼠标点击任意地方的时候&#xff0c;点击的地方会出现一个小心&#xff0c;每一次出现的小心的颜色都不一样。 原理分析 1.设置点击的范围 2.鼠标点击事件 3.记录鼠标点击的位置在此位置出现一颗小心 4.小心向上浮动并且自动消失 5.小心颜色…

【youcans 的 OpenCV 例程200篇】179.图像分割之 GrabCut 图割法(掩模图像)

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

VScode 透明背景设置

我们通常使用VScode开发项目&#xff0c;时间长了不免有些疲惫&#xff0c;在此教给大家一个设置VScode 透明背景的方法&#xff0c;给大家的代码之旅带来一点乐趣。 1.首先在vscode扩展中&#xff0c;找到并下载background这个插件&#xff0c;快捷键Ctrlshiftx 2.完成第一步…

【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…

IDEA设置主题和背景图片

我们使用IDEA开发的时候长期使用一种主题会感到沉重&#xff0c;那麽我们如何为IDEA设置我们自己想要的背景图片呢&#xff1f;&#xff1f;&#xff1f; 一 . 设置主题 Idea主题自带的有三种&#xff1a;1、黑色模式 2、Intellij模式 3、高对比度模式&#xff1b; 具体修改步…

【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…

java concurrent int_java.util.concurrent.AtomicInteger

AtomicInteger&#xff0c;一个提供原子操作的Integer的类。在Java语言中&#xff0c;i和i操作并不是线程安全的&#xff0c;在使用的时候&#xff0c;不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。来看AtomicInteger提供的接口。//…

IDEA创建SpringBoot

对于SpringBoot的开发我们使用IDEA工具是非常方便的&#xff0c;不仅开发效率高&#xff0c;而且代码能自动添加补全&#xff0c;那麽我们如何使用IDEA创建SpringBoot项目呢&#xff1f;&#xff1f;&#xff1f; 1.使用IntelliJ IDEA 内置的Spring Initializr来创建SpringBoo…

【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…

procyon java8_java jdk 8反编译工具JD-GUI、procyon-decompiler、luyten、crf下载使用简介

本文对常用的反编译工具进行简单介绍JD-GUI、procyon-decompiler、luyten、crf反编译工具分类JD-GUIJDK7以及之前可以使用 JD-GUI&#xff0c;如果版本>1.8 各种问题http://java-decompiler.github.ioprocyon-decompiler如果版本>1.8 &#xff0c;可以使用 procyon-dec…

SpringBoot页面出现 Whitelabel Error Page

我们运行SpringBoot项目之后需要通过Tomcat进行访问&#xff0c;但是我们访问的时候出现了Whitelabel Error Page的错误&#xff0c;我们该如何解决呢&#xff1f;&#xff1f;&#xff1f; 错误页面 究其原因是我们的主程序缺少一个RestController的注解。 没有使用RestCon…

SpringBoot入门小案例

使用SpringBoot项目输出一个hello SpringBoot的入门小项目。 1.再IDEA中创建SpringBoot项目&#xff0c;创建完成如下所示。 2.项目创建完后打开包结构&#xff0c;WebApplication是项目的入口&#xff0c;是启动类&#xff0c;SpringBootApplication&#xff0c;这个注解非常…

【youcans 的 OpenCV 例程200篇】183.基于轮廓标记的分水岭算法

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…