最近在看面试宝典,其中看到一个题目说:输入一个正整数n,输出它的zigzag数组。

分析:书上给出了数学方面的思考然后给了代码。但是我感觉如果真是面试或者考试遇到的话,我这种笨脑袋肯定是想不出来的,因此最好的方式是观察数组,然后找到规律。观察可知,数字递增的方向只有4个:right, left-down, down, right-up。因此我们可以设置一个switch语句,然后每走一步,判断下步要走的方向。因为输出的是n*n的数组,因此矩阵的右下角的数字肯定不会超过n*n,用它作为结束条件即可。

(需要注意的是:刚开始做时忘记考虑矩阵赋值了一半时,右下角的怎么赋值。因此每个方向走完了,下一步都会有两种方向。不要忘记右下角的赋值。)

代码如下:

public class Test {
static int[][] zigzag(int n) {
int[][] a = new int[100][100];
int right = 0, left_down = 1, down = 2, right_up = 3;
int s = 0;
int it = n * n;
int flag = 0;
int i = 0, j = 0;
while(s <= it) {
a[i][j] = s;
switch (flag){
case 0: { //right
j++;
if(0 == i)
flag = 1;
else if(n-1 == i)
flag = 3;
break;
}
case 1: {//left-down
i++;
j--;
if(j == 0)
flag = 2;
else if(i == n-1)
flag = 0;
break;
}
case 2: {//down
i++;
if(0 == j)
flag = 3;
else if(n-1 == j)
flag = 1;
break; }
case 3: {
i--;
j++;
if(0 == i)
flag = 0;
else if(n-1 == j)
flag = 2;
break;
} }
s++;
}
return a;
} public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 7;
int[][]a = zigzag(n);
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
} } }

Zigzag数组 -- 面试宝典的更多相关文章

  1. 形成一个zigzag数组(JPEG编码里取像素数据的排列顺序)

    面试例题:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)(自程序 ...

  2. zigzag数组实现

    题目出自面试宝典8.3.2 题目描述: 输入n,求一个n*n的矩阵,规定矩阵沿45度线递增,形成一个zigzag数组(JPEG编码里去像素数据的排列顺序),请问如何用C++实现? 例如: n=2 0 ...

  3. 【转】Java面试宝典2015版(绝对值得收藏超长版)(一)

    (转自:http://mp.weixin.qq.com/s?__biz=MjM5MTM0NjQ2MQ==&mid=206619070&idx=1&sn=fcb21001d442 ...

  4. .NET工程师面试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...

  5. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  6. Java面试宝典2015版

    这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完 ...

  7. Java面试宝典2013版(超长版)

    一. Java基础部分......................................................................................... ...

  8. 【Android】面试宝典

    Android面试 1. 内容介绍................................................................................... ...

  9. Java面试宝典2014版

    一. Java基础部分......................................................................................... ...

随机推荐

  1. SpringBoot学习6:springboot文件上传

    1.编写页面uploadFile.html <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  2. 微信小程序开发踩坑与总结 -

    原文链接:https://segmentfault.com/a/1190000008516296 前段时间把公司小程序项目开发完成了,所以来写写自己开发过程中碰到的问题和解决方法,以及用到的提高效率的 ...

  3. 深入理解PHP数组函数和预定义接口

    一. PHP对数组的过滤 函数: array_filter(p1[,p2]) 参数p1是要过滤的数组,参数p2是自定义过滤会掉函数(可以是匿名函数) 例子: <?php $arr = ['',n ...

  4. MyFirstDay_答案_1.**猫(自己整理)

    1>***猫: python基础类: 字符串反转的常用处理方式: # 方法一:使用字符串切片 s = "hello python" result = s[::-1] prin ...

  5. 云心出岫——Splay Tree

    (多图预警!!!建议在WI-FI下观看) 之前我们谈论过AVL树,这是一种典型适度平衡的二叉搜索树,成立条件是保持平衡因子在[-1,1]的范围内,这个条件已经是针对理想平衡做出的一个妥协了,但依然显得 ...

  6. 理解canvas路径

    canvas路径和ps里面的路径差不多,在进行图形绘制时,先绘制出来图形的路径,然后再描边或者填充. canvas路径还有子路径的概念,在某一时刻,canvas之中只能有一条路径存在,Canvas规范 ...

  7. 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题

    问题:boostrap-table有水平和垂直滚动条时,滚动条不高的时候(滚动高度比较大的时候没有问题),滚动条滑到最右边表格标题和内容单元格无法对齐的问题 问题原因:bootstrap-table源 ...

  8. 关于C、内存、栈的一些杂谈

    c的程序要手动管理内存的,所有的数据(结构)都可以分为两种存储方式,连续存储,顾名思义申请一片连续的内存以供使用(数组.结构体.共用体.栈.队列):非连续存储,顾名思义断断续续的的存储,那有一点这有一 ...

  9. 18 Django-组件拾遗

    一 Django的form组件 forms组件 二 Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的 ...

  10. 19,django组件之contenttype(一)

    django组件之contenttype(一) 方式1:适用于1张表和另一张表要关联的时候. 1.路飞学成表设计: 2.将2个价格策略表合并1张表. 3.如果再加一张表,那价格策略表的表结构会发生改变 ...