面试题之打印螺旋数组

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

结果样式

之后使用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();

}

}

}

}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,395评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,907评论 0 17
  • 要怎样的表达 才能让你明白我的真心 我的想念 经一场春雨 肆意疯长 爬上夜的孤灯 莫非要我粉身碎骨 坠入轮回 用我...
    蔚霐阅读 2,635评论 0 0

友情链接更多精彩内容