最近在看面试宝典,其中看到一个题目说:输入一个正整数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. XML DTD约束 对xml文件的crud的查询Read Retrieve操作 xml递归遍历

    本地的dtd文档 xml中引入dtd文档 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书 ...

  2. forEach、for...in、for...of

    forEach 数组实例的遍历方法 const arr=['red', 'green', 'blue']; arr.forEach(function(element, index) { console ...

  3. spring-AspectJ

    动态代理 ProxyFactoryBean织入切面数量太多不利于围护 BeanNameAutoProxyCreater-------------根据Bean名称创建代理 DefaultAdvisorA ...

  4. Thymeleaf显示Map集合数据

    <select class="form-control zz-set-input-size" id="channel"> <option va ...

  5. input属性总结

    <input type="text" readonly="readonly" /> 这个是不能输入的 readonly="readonly ...

  6. 汇编:输出寄存器AX中的内容(子程序)

    ;输出寄存器AX中的内容(子程序) DATAS segment DATAS ends CODES segment START: mov AX,DATAS mov DS,AX ;正式代码开始 mov A ...

  7. 内置函数系列之 filter

    filter 过滤 基本语法: s = filter(function,iterable) 将可迭代对象的每一个元素,传进函数中,根据函数中的判断条件,返回True或False 返回True的是保留的 ...

  8. 【jQuery】手机验证码倒计时效果

    <ul class="ulist"> <li class="group"> <label class="label&qu ...

  9. PHP CodeIgniter框架实现读写分离

    一.目标 当前服务器只做了主从,未配置读写分离,读写分离的功能就只有交给程序来实现,本文主要谈谈Codeigniter怎么实现读写分离,并且需要满足以下两点: 1.读写分离对开发应该透明. 网上有方案 ...

  10. html5中的progress兼容ie,制作进度条样式

    html5新增的progress标签用处很大,它可以制作进度条,不用像以前那样用css来制作进度条! 一.progress使用方法 progress标签很好使用,他有两个属性,value和max,va ...