【剑指Offer 20】顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字。

代码如下:

package demo;

public class Test20 {
    public static void printMatrixClockWisely(int[][] numbers) {
        if(numbers == null) {
            return;
        }
        // 记录一环开始位置的行
        int x = 0;
        // 记录一环开始位置的列
        int y = 0;
        while(x*2 < numbers.length && y*2 < numbers[0].length) {
            printMatrixInCircle(numbers, x, y);
            x++;
            y++;
        }
    }

    private static void printMatrixInCircle(int[][] numbers, int x, int y) {
        // 数组的行数
        int rows = numbers.length;
        // 数组的列数
        int cols = numbers[0].length;
        // 输出环的最上面的一行
        for(int i = y; i <= cols - y - 1; i++) {
            System.out.print(numbers[x][i] + "");
        }
    
        // rows-x-1:环的最下面的一行的行号
        // rows-x-1 > x:表明环不只有一行
        if(rows-x-1 > x) {
            // 因为右边那列最上面的那个已经被输出了,因此行从x+1开始,一只输出到最下面一行
            for(int i=x+1;i<=rows-x-1;i++) {
                System.out.print(numbers[i][cols-y-1]+"");
            }
        }
    
        // cols-1-y>y:环不只有一列。这样才会进行第3步,输出下面一行
        if(rows-1-x > x && cols-1-y > y) {
            // 因为环的右下角的位置已经输出了,因此列号从cols-y-2开始
            for(int i = cols-y-2; i >= y; i--) {
                System.out.print(numbers[rows-1-x][i] + "");
            }
        }
    
        // 至少有3行,才会进行第4步
        if(cols-1-y>y && rows-1-x > x+1) {
            // 因为最左边一列的第1个和最后1个都已经被输出了,
            // 因此从倒数第2行(rows-1-x-1),输出到第2行(x+1)
            for(int i = rows-1-x-1;i>=x+1;i--) {
                System.out.print(numbers[i][y]+"");
            }
        }
    }
}

来源:http://blog.csdn.net/derrantcm/article/details/46691013

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,909评论 25 708
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,196评论 12 197
  • 理解矩阵一:转载自:http://blog.csdn.net/myan/article/details/64751...
    jiandanjinxin阅读 1,552评论 1 15
  • 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 ...
    wuzhiguo阅读 1,271评论 0 0
  • 最近看了一本小说《魔道祖师》,是很早之前朋友就介绍我看的,由于各种原因以前一直没来得及看,这次终于有了闲暇...
    不屈ly阅读 1,219评论 1 15