面试算法题2
2007-03-21 19:11
281 查看
面试算法题2
package myfile;
/**
* 请用Java语言写一个函数printArray(int[][] aData),该函数将一个二维数组以顺时针螺旋的方式打印出来。
* 例如,对数组:
* 1 2 3 4 5
* 14 15 16 17 6
* 13 20 19 18 7
* 12 11 10 9 8
*
* 打印出来的序列应该是:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
* @author J
*
*/
public class Mymethod2 {
public static int[][] arr={{1,2,3,4,5},{14,15,16,17,6},{13,20,19,18,7},{12,11,10,9,8}};
public static void main(String[] args) {
Mymethod2 program=new Mymethod2();
program.printArray(arr);
}
public void printArray(int[][] aData){
Character[] dire={'E','S','W','N'};
//System.out.println(dire.length);
char p=dire[0];
Boolean loop1=true;
int h1=0,h2=aData[0].length-1;
int v1=0,v2=aData.length-1;
//System.out.println(v2);
int i=0;
while(loop1){
p=dire[i];
if(v1>v2 || h1>h2) loop1=false;
if(p=='E'){
forwardPrint(h1,h2,v1,v1,aData);
//++h1;
++v1;
}
if(p=='S'){
forwardPrint(h2,h2,v1,v2,aData);
//--v2;
--h2;
}
if(p=='W'){
reversePrint(h1,h2,v2,v2,aData);
//--h2;
--v2;
}
if(p=='N'){
reversePrint(h1,h1,v1,v2,aData);
//++v1;
++h1;
}
++i;
if(i==4) i=0;
}
}
public void forwardPrint(int a1, int a2, int b1, int b2, int[][] c){
for(int j=b1;j<=b2;j++){
for(int k=a1;k<=a2;k++){
System.out.print(c[j][k]+",");
}
}
}
public void reversePrint(int a1, int a2, int b1, int b2, int[][] c){
for(int j=b2;j>=b1;j--){
for(int k=a2;k>=a1;k--){
System.out.print(c[j][k]+",");
}
}
}
}
--------------------------------------------------------------------------------------------------------------
输出结果:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
补充:最后一个逗号未作处理;另外,算法可以再优化。
package myfile;
/**
* 请用Java语言写一个函数printArray(int[][] aData),该函数将一个二维数组以顺时针螺旋的方式打印出来。
* 例如,对数组:
* 1 2 3 4 5
* 14 15 16 17 6
* 13 20 19 18 7
* 12 11 10 9 8
*
* 打印出来的序列应该是:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
* @author J
*
*/
public class Mymethod2 {
public static int[][] arr={{1,2,3,4,5},{14,15,16,17,6},{13,20,19,18,7},{12,11,10,9,8}};
public static void main(String[] args) {
Mymethod2 program=new Mymethod2();
program.printArray(arr);
}
public void printArray(int[][] aData){
Character[] dire={'E','S','W','N'};
//System.out.println(dire.length);
char p=dire[0];
Boolean loop1=true;
int h1=0,h2=aData[0].length-1;
int v1=0,v2=aData.length-1;
//System.out.println(v2);
int i=0;
while(loop1){
p=dire[i];
if(v1>v2 || h1>h2) loop1=false;
if(p=='E'){
forwardPrint(h1,h2,v1,v1,aData);
//++h1;
++v1;
}
if(p=='S'){
forwardPrint(h2,h2,v1,v2,aData);
//--v2;
--h2;
}
if(p=='W'){
reversePrint(h1,h2,v2,v2,aData);
//--h2;
--v2;
}
if(p=='N'){
reversePrint(h1,h1,v1,v2,aData);
//++v1;
++h1;
}
++i;
if(i==4) i=0;
}
}
public void forwardPrint(int a1, int a2, int b1, int b2, int[][] c){
for(int j=b1;j<=b2;j++){
for(int k=a1;k<=a2;k++){
System.out.print(c[j][k]+",");
}
}
}
public void reversePrint(int a1, int a2, int b1, int b2, int[][] c){
for(int j=b2;j>=b1;j--){
for(int k=a2;k>=a1;k--){
System.out.print(c[j][k]+",");
}
}
}
}
--------------------------------------------------------------------------------------------------------------
输出结果:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
补充:最后一个逗号未作处理;另外,算法可以再优化。
相关文章推荐
- [算法总结] 20 道题搞定 BAT 面试——二叉树
- 【C++研发面试笔记】19. 常用算法-排序算法
- 程序员如何快速准备面试中的算法
- 直通BAT面试算法---智力题2-赛马
- 代码面试最常用的10大算法
- 代码面试最常用的10大算法
- 面试---算法排序(3)(希尔排序)
- 字符串匹配算法 【微软面试100题 第三十三题】
- 【LeetCode-面试算法经典-Java实现】【101-Symmetric Tree(对称树)】
- 2017华为面试算法题小结
- 青蛙跳台阶问题,常见面试算法题,斐波那契数列(Fibonacci Sequence)
- 【LeetCode-面试算法经典-Java实现】【118-Pascal's Triangle(帕斯卡三角形)】
- 技术面试宝典: 很全面的算法和数据结构知识(含代码实现)
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 前端开发面试笔试学习--算法01--数组求和/数组去重
- 分享Java面试中遇到的一些经典算法题目
- 编程面试的10大算法概念汇总
- 编程面试的10大算法概念汇总
- 一个月搞定面试算法,硅谷工程师传授面试技巧
- 编程面试的10大算法概念汇总