Zigzag数组 -- 面试宝典
最近在看面试宝典,其中看到一个题目说:输入一个正整数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数组 -- 面试宝典的更多相关文章
- 形成一个zigzag数组(JPEG编码里取像素数据的排列顺序)
面试例题:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)(自程序 ...
- zigzag数组实现
题目出自面试宝典8.3.2 题目描述: 输入n,求一个n*n的矩阵,规定矩阵沿45度线递增,形成一个zigzag数组(JPEG编码里去像素数据的排列顺序),请问如何用C++实现? 例如: n=2 0 ...
- 【转】Java面试宝典2015版(绝对值得收藏超长版)(一)
(转自:http://mp.weixin.qq.com/s?__biz=MjM5MTM0NjQ2MQ==&mid=206619070&idx=1&sn=fcb21001d442 ...
- .NET工程师面试宝典
.Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...
- java面试宝典(蓝桥学院)
Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...
- Java面试宝典2015版
这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完 ...
- Java面试宝典2013版(超长版)
一. Java基础部分......................................................................................... ...
- 【Android】面试宝典
Android面试 1. 内容介绍................................................................................... ...
- Java面试宝典2014版
一. Java基础部分......................................................................................... ...
随机推荐
- Element表单验证(1)
Element表单验证(1) 首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程. Element主要使用了async-validator这个库作为表单验证 async-valida ...
- SAP BI 常用TCODE
S.No Tcode Description 1 RSA1 Administrator Work Bench 2 RSA11 Calling up AWB with the IC tree 3 RSA ...
- Ansible工作架构和原理
特性 模块块化调用持定的模块,完成持定任务 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块 支持自定义模块 基于Python语法头现 部署简单,基于python和SSH(默认已 ...
- html中table,tr,td
table表格,tr表格中的行,tr表格中的列,等级关系是table>tr>td, 当然表格中还包括thead,tbody,tfoot,th,但由于浏览器支持缘故很少使用.另外table在 ...
- Reward HDU - 2647
传送门 Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to dis ...
- Git ---游离状态下的commit 分支切换与找回,commit之后无法找到历史记录
commit之后无法找到历史记录 https://blog.csdn.net/zyb2017/article/details/78307688
- Android 使用Retrofit2.0+OkHttp3.0实现缓存处理+Cookie持久化第三方库
1.Retrofit+OkHttp的缓存机制 1.1.第一点 在响应请求之后在 data/data/<包名>/cache 下建立一个response 文件夹,保存缓存数据. 1.2.第二点 ...
- 1196/P2323: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2191 Solved: 1258 Descriptio ...
- [转]Android进程间通信--消息机制及IPC机制实现
Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...
- vue-i18n vue-cli项目中实现国际化 多语言切换功能 一
vue-cli项目中引入vue-i18n 安装: npm install vue-i18n可参考vue-i18n官网文档 main.js中引入: import Vue from 'vue' impor ...