《Cracking the Coding Interview》——第3章:栈和队列——题目4
2014-03-18 05:28
题目:你肯定听过汉诺威塔的故事:三个柱子和N个从小到大的盘子。既然每次你只能移动放在顶上的盘子,这不就是栈操作吗?所以,请用三个栈来模拟N级汉诺威塔的玩法。放心,N不会很大的。
解法:递归着玩儿吧,还挺容易写的。要是迭代,我估计够呛。
代码:
// 3.4 Implement Hanoi Tower with three stacks.
#include <cstdio>
#include <stack>
using namespace std; class Solution {
public:
void initHanoiTower(int n) {
int i; clearHanoiTower(); for (i = n; i >= ; --i) {
s[].push(i);
}
} void moveHanoiTower(int n, int from, int to) {
if (from == to) {
return;
} if ((int)s[from].size() < n) {
return;
} if (n == ) {
s[to].push(s[from].top());
s[from].pop();
return;
} int i;
for (i = ; i < ; ++i) {
b[i] = false;
}
b[from] = true;
b[to] = true;
int other;
for (i = ; i < ; ++i) {
if (!b[i]) {
other = i;
break;
}
} moveHanoiTower(n - , from, other);
moveHanoiTower(, from, to);
moveHanoiTower(n - , other, to);
} void clearHanoiTower() {
int i; for (i = ; i < ; ++i) {
while (!s[i].empty()) {
s[i].pop();
}
}
} void printHanoiTower() {
stack<int> ss[];
int i; for (i = ; i < ; ++i) {
ss[i] = s[i];
printf("Tower %d:", i + );
while (!ss[i].empty()) {
printf(" %d", ss[i].top());
ss[i].pop();
}
printf("\n");
}
}
private:
stack<int> s[];
int b[];
}; int main()
{
int n;
Solution sol; while (scanf("%d", &n) == && n > ) {
sol.initHanoiTower(n); printf("At the beginning:\n");
sol.printHanoiTower();
printf("\n"); sol.moveHanoiTower(n, , ); printf("At the end:\n");
sol.printHanoiTower();
printf("\n");
} return ;
}
《Cracking the Coding Interview》——第3章:栈和队列——题目4的更多相关文章
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 数据结构(c语言版,严蔚敏)第3章栈和队列
第3章栈和队列
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- Cracking the Coding Interview 150题(二)
3.栈与队列 3.1 描述如何只用一个数组来实现三个栈. 3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值.pop.push和min三个方法的时间复杂度必须为O( ...
- 数据结构(C语言版)-第3章 栈和队列
3.1 栈和队列的定义和特点3.2 案例引入3.3 栈的表示和操作的实现3.4 栈与递归3.5 队列的的表示和操作的实现3.6 案例分析与实现 基本操作有入栈.出栈.读栈顶元素值.建栈.判断栈满.栈空 ...
随机推荐
- UE4工具
COMMON CONTAINERS TARRAY (Engine\Source\Runtime\Core\Public\Containers\Array.h) TSET (Engine\Source\ ...
- MYSQL 之SET GLOBAL innodb_buffer_pool_size =n
工作遇到一个情况是索引相同的情况下,mysql服务在linux上运行很快,在windows服务器上运行很慢,版本是V5.7以后得版本,同事查找了下说应该设置 SET GLOBAL innodb_buf ...
- Android(java)学习笔记64:Android权限大全
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissio ...
- python 3+djanjo 2.0.7简单学习(四)--Django视图
1.概念 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」.比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页——展示最近的几项内容. 内容“详情”页——详细展示某项内容 ...
- 2.1-Java语言基础(keyword)
2.1 keyword watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXNpcmVuZQ==/font/5a6L5L2T/fontsize/400/fi ...
- 高亮代码 SyntaxHighlighter
SyntaxHighlighter: http://alexgorbatchev.com/SyntaxHighlighter/download/ demo <!DOCTYPE html PUBL ...
- 17、SpringBoot------整合dubbo
SpringBoot整合Dubbo+Zookeaper 1.安装运行zookeeper (1)下载zookeeper 官网:http://zookeeper.apache.org/ (2)解压缩 (3 ...
- 一篇RxJava友好的文章(二)
上一篇文章介绍了rxjava的基本用法,和一些常用的操作符,以及rxjava的链式操作带来的好处.由于rxjava非常的强大,让我如此的痴迷,我打算写五篇文章,专门讲解rxjava 常见的操作符和用法 ...
- git 删除本地存在,远程已经删除的分支
git remote prune origin 强迫症,看到这些分支不一致就来气!
- 10-UIScrollView
UIScrollView 掌握 UIScrollView的常见属性 UIScrollView的常用代理方法 UIScrollView的缩放 UIScrollView和UIPageControl的分页 ...