今天看到一道面試題丁眼,打印螺旋數(shù)組,具體打印結(jié)果如下圖所示:
之后使用java代碼實現(xiàn)了一下斧散,具體代碼如下所示凭迹。
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;//當(dāng)前要填的數(shù)字
boolean xIsAdd = true;//判斷x增還是減
boolean yIsAdd = true;//判斷y增還是減
boolean circleX = true;//是否循環(huán)X
int[][] array;//創(chuàng)建的數(shù)組
int x = 0;//當(dāng)前數(shù)字放的位置
int y = 0;
public int[][] fun() {
if (currentValue > width * leng) {
return array;
}
if (circleX) {
//循環(huán)x
if (xIsAdd) {
//x循環(huán)增加
for (; x < leng && array[y][x] == 0;x++) {
array[y][x] = currentValue;
currentValue++;
}
xIsAdd = false;//循環(huán)結(jié)束后將x循環(huán)增加置為循環(huán)減少
circleX = false;//下次循環(huán)y
x--;
y++;
return fun();
}else {
//x循環(huán)減少
for (; x >= 0 && array[y][x] == 0; x--) {
array[y][x] = currentValue;
currentValue++;
}
xIsAdd = true;//循環(huán)結(jié)束后將x循環(huán)減少置為循環(huán)增加
circleX = false;//下次循環(huán)y
x++;
y--;
return fun();
}
}else {
//循環(huán)y
if (yIsAdd) {
//y增加循環(huán)
for (; y < width && array[y][x] == 0; y++) {
array[y][x] = currentValue;
currentValue++;
}
yIsAdd = false;//循環(huán)結(jié)束后將y循環(huán)增加置為循環(huán)減少
circleX = true;//下次循環(huán)x
y--;
x--;
return fun();
}
else {
//y減少循環(huán)
for (; y >= 0 && array[y][x] == 0; y--) {
array[y][x] = currentValue;
currentValue++;
}
yIsAdd = true;//循環(huán)結(jié)束后將y循環(huán)減少置為循環(huán)增加
circleX = true;//下次循環(huán)x
y++;
x++;
return fun();
}
}
}
}
感覺比較麻煩,誰有簡單的方法晦炊,可以分享給我鞠鲜,謝謝宁脊。