面试题之打印螺旋数组

2016-10-15  本文已影响0人  he_321

今天看到一道面试题,打印螺旋数组,具体打印结果如下图所示:

结果样式

之后使用java代码实现了一下,具体代码如下所示。

package test;

public class PrintTest {

public static void main(String[] args) {

PrintTest a = new PrintTest(5,9);

int[][] result = a.fun();

for(int i = 0; i < result.length; i ++){

for (int j = 0; j < result[i].length; j++) {

System.out.print(result[i][j] + "  ");

}

System.out.println();

}

}

PrintTest(int width, int leng){

this.leng = leng;

this.width = width;

this.array = new int[width][leng];

}

int leng;//要打印的矩形的长度

int width;//要打印的矩形的宽度

int currentValue = 1;//当前要填的数字

boolean xIsAdd = true;//判断x增还是减

boolean yIsAdd = true;//判断y增还是减

boolean circleX = true;//是否循环X

int[][] array;//创建的数组

int x = 0;//当前数字放的位置

int y = 0;

public int[][] fun() {

if (currentValue > width * leng) {

return array;

}

if (circleX) {

//循环x

if (xIsAdd) {

//x循环增加

for (; x < leng && array[y][x] == 0;x++) {

array[y][x] = currentValue;

currentValue++;

}

xIsAdd = false;//循环结束后将x循环增加置为循环减少

circleX = false;//下次循环y

x--;

y++;

return fun();

}else {

//x循环减少

for (; x >= 0 && array[y][x] == 0; x--) {

array[y][x] = currentValue;

currentValue++;

}

xIsAdd = true;//循环结束后将x循环减少置为循环增加

circleX = false;//下次循环y

x++;

y--;

return fun();

}

}else {

//循环y

if (yIsAdd) {

//y增加循环

for (; y < width && array[y][x] == 0; y++) {

array[y][x] = currentValue;

currentValue++;

}

yIsAdd = false;//循环结束后将y循环增加置为循环减少

circleX = true;//下次循环x

y--;

x--;

return fun();

}

else {

//y减少循环

for (; y >= 0 && array[y][x] == 0; y--) {

array[y][x] = currentValue;

currentValue++;

}

yIsAdd = true;//循环结束后将y循环减少置为循环增加

circleX = true;//下次循环x

y++;

x++;

return fun();

}

}

}

}

感觉比较麻烦,谁有简单的方法,可以分享给我,谢谢。

上一篇下一篇

猜你喜欢

热点阅读