面试算法题2

面试算法题2

package myfile;
/**
* 请用Java语言写一个函数printArray(int[][] aData),该函数将一个二维数组以顺时针螺旋的方式打印出来。
* 例如,对数组:
* 12345
* 141516176
* 132019187
* 12111098
*
* 打印出来的序列应该是: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,

补充:最后一个逗号未作处理;另外,算法可以再优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值