博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java逐行输出N*N螺旋矩阵,要求最小空间复杂度
阅读量:6258 次
发布时间:2019-06-22

本文共 1796 字,大约阅读时间需要 5 分钟。

hot3.png

今天去参加了一个笔试,有一个笔试题是逐行输出一个N*N螺旋矩阵,要求最小空间复杂度,比如4*4,则如下:

1  2  3  4 12 13 14  5 11 16 15  6 10  9  8  7

当时想了半天,最后终于想到个思路,不过也用了太长时间,没时间写具体代码了。而且笔试也是手写代码到纸上,这样代码没法实时改和看结果,而且水平有限,所以很讨厌这样的写代码方式。  回来路上想既然思路都有了,在电脑上应该很快能写出来,结果折腾了3个多小时才写好,感觉自己真是弱爆啊。。。对数字太不敏感,尤其是for循环是0还是1开头,到底包不包括边界,一复杂点儿就晕。。。

自己的思路是这样的:每圈的长度是可以算出来的,比如上面4*4的矩阵,最外圈长度是12,内圈的长度是4,所以可可以根据第i*j个元素处在那一圈计算其值大小。

最终代码如下:

public class Matrix {    public static void main(String[] args) {        new Matrix().printMatrix(7);    }    public static String form = null;    public void printMatrix(int dim) {        form = "%"+(String.valueOf(dim*dim).length()+1) + "d";        int max = (dim%2==0)?(dim/2):(dim/2+1);        for(int i=1; i<=max; i++) {            for(int j=1;j
0;j--) { print(getSize(j-1, dim)+(dim-2*(j-1))+i-j); } System.out.println(); } for(int i=max+1; i<=dim; i++) { for(int j=1;j<=dim-i;j++) { print(getSize(j, dim)-(i-j)+1); } printBottemLine(dim-i+1, dim); for(int j=dim-i;j>0;j--) { print(getSize(j-1, dim)+(dim-2*(j-1))+i-j); } System.out.println(); } } public void print(int i) { System.out.format(form, i); } public int getSize(int level, int dim) { int size =0; for(int i=1;i<=level;i++) { size+=4*(dim-2*(i-1))-4; } return size; } public void printTopLine(int level, int dim) { int size =getSize(level-1, dim); for(int i=0; i

 输出:

1  2  3  4  5  6  7 24 25 26 27 28 29  8 23 40 41 42 43 30  9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13

但感觉代码还是太复杂了,看着就晕,不知道谁有更简单的方法啊,网上简单搜了一些,没找到。。。

转载于:https://my.oschina.net/u/1382972/blog/221115

你可能感兴趣的文章
c#中的常用ToString()方法总结
查看>>
ajax五,jsonp跨域的本质
查看>>
调用打印机打印
查看>>
poj1742
查看>>
js--val()比较少用的用法
查看>>
bzoj2002: [Hnoi2010]Bounce 弹飞绵羊
查看>>
mysql的分区和分表
查看>>
Java 读取 .properties 配置文件
查看>>
IntelliJ IDEA 12 key from twitter
查看>>
css
查看>>
装饰设计模式
查看>>
《Linux内核原理与分析》第八周作业
查看>>
企业级工作流解决方案(二)--微服务总体介绍
查看>>
Bonbo Git Server
查看>>
取消文件默认打开方式
查看>>
JVM 调试工具
查看>>
Linux C 语言 获取系统时间信息
查看>>
pku 1182 食物链
查看>>
echarts使用笔记四:双Y轴
查看>>
删除操作系统服务(Delete OS Service)
查看>>