螺旋队列-扩展题目

1. 简述

    在一篇博客上看到的题目,说是网易有道的面试题,用上一篇文章的方法还是很好推导出来的。

2. 题目

    打印如下形式的矩阵

n=5:
1   2   9 10 25
4   3   8 11 24
5   6   7 12 23
16 15 14 13 22
17 18 19 20 21

n=6:
1   2   9 10 25 26
4   3   8 11 24 27
5   6   7 12 23 28
16 15 14 13 22 29
17 18 19 20 21 30
36 35 34 33 32 31

3. 分析

    仔细看可以发现:2-3-4是一条路径,5-6-7-8-9是一条路径,即一个向下走向左拐,另一个是先右走向上拐,就这两种路径,依次重复出现。
    边界+方向解法:
    初始点(0,0),顺序方向两个,依次轮流使用:右下左、下右上,初始边界:RightBound=1,DownBound=1,LeftBound=0,UpBound=0。边界更新:RightBound++,DownBound++。注意这里只有两个边界需要更新。
    其实这两个顺序方向,可以合并为一整个,即右下左下右上,每次状态变化时,更新边界。这样的话,就要区别两个右的状态和两个下的状态,比如定义PREV_RIGHT和NEXT_RIGHT来区别两个右。
    步数+方向解法
    初始点(0,0),顺序方向两个:依次轮流使用,右下左、下右上,初始步数:Step1=1,Step2=1,Step3=1,Step4=1,Step5=2,Step6=2,步数更新:Step2+=2,Step3+=2,Step5+=2,Step6+=2,有两个步数不变,其实正好对应两个不变的边界。

4. 代码

    分析到这个份上,就不写了。

5. 参考

    网易有道笔试题加答案       http://wxdlut.blog.163.com/blog/static/128770158200991245845575/

posted @ 2011-09-03 10:56  xiaodongrush  阅读(337)  评论(0编辑  收藏  举报