顺时针打印矩阵
来源:互联网 发布:php post 接收 编辑:程序博客网 时间:2024/05/16 02:50
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如输入以下矩阵:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10
分析:把矩阵想象成若干个圈,用一个循环打印矩阵,每次打印矩阵的一个圈
打印分析:
打印第一圈的左上角坐标为(0,0),第二圈的坐标为(1,1),依次类推。左上角的坐标中行标和列标总是相同的,于是可以在矩阵中选取左上角为(start,start)的一圈作为我们分析的目标。每次去掉外面的行和列,每次行和列减少2,因此推断出让循环继续的条件是columns>startX*2并且rows>startY*
void printMatrixClockwisely(int[][] numbers) { numbers=new int[1][1]; numbers[0][0]=1; if (numbers == null || numbers[0].length <= 0 || numbers.length <= 0) { return ; } int start = 0; while (numbers[0].length > start * 2 && numbers.length > start * 2) { printMatrixIncircle(numbers, numbers[0].length, numbers.length, start); ++start; } }
打印一圈的功能:分为四步,第一步从左到右打印一行,第二步从上到下打印一列,第三步从右到左打印一行,第四步从下到上打印一列。每一步根据起始坐标和终止坐标用一个循环就能打印一列或者一行
分析每一步的前提条件
第一步总是需要的,因为打印一圈至少有一步,如果只有一行,就不用第二步。也就是第二步的前提是终止行号大于起始行号。需要第三部打印的前提是圈内至少有两行两列,也就是除了终止行号大于起始行号,还要终止列号大于起始列号,同理,打印第四步的前提条件是至少有三行两列,因此要求终止行号比起始行号至少大2,同时终止列号大于起始列号
void printMatrixIncircle(int[][] numbers, int columns, int rows, int start) { int endX = columns - 1 - start; int endY = rows - 1 - start; for (int i = start; i <=endX; ++i) { int number=numbers[start][i]; printNumber(number); } //从上打印到下 if (start<endY){ for (int i=start+1;i<=endY;++i){ int number=numbers[i][endX]; printNumber(number); } } //从右到左打印一行 if (start<endX&&start<endY){ for (int i=endX-1;i>=start;--i){ int number=numbers[endY][i]; printNumber(number); } } //从右到左打印一行 if (start<endX&&start<endY-1){ for (int i=endY-1;i>=start+1;--i){ int number=numbers[i][start]; printNumber(number); } } } void printNumber(int number){ System.out.print(number); }
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 嵌入式LINUX新手问题大全——常见错误已及解决方法
- linux passwd 设置 用户 空密码
- 聚类算法理论介绍
- git clone克隆时出现的种种问题
- Ubuntu16.04 编译OpenCV 和 Tesseract-OCR
- 顺时针打印矩阵
- HashMap HashSet源码分析
- 轻量级微服务框架的通信架构
- 学习C++ -> 构造函数与析构函数
- Java 发送邮件
- 11.19笔记
- Ubuntu 看不到共享文件夹
- jlink下载文件配合uboot 的 fatwrite fatload传输文件
- JS中undefined和null的区别