顺时针打印矩阵
2016-06-04 20:41
369 查看
一,问题描述
给定一个N x N 的矩阵(方阵),按照从外向里的以顺时针方向依次打印矩阵中的每个元素。
比如:一个 3X3的矩阵如下:打印顺序为:1 2 3 6 9 8 7 4
{1,2,3}
{4,5,6}
{7,8,9}
打印方向如下:
![](data:image/png;base64,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)
二,算法思路
可以采用递归的方式来打印整个矩阵中的元素。
首先按顺时针方向打印最外层的元素,然后再递归地打印更里层的元素。
![](data:image/png;base64,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)
对于N维方阵而言:每打印一圈之后,维数降低2。当N为奇数时,最终递归到 1x1矩阵。当N为偶数时,最终递归到N=0
因此,递归的基准条件:当N==0 时,直接返回。 N==1时,打印矩阵中唯一的那个元素,然后返回。
具体代码如下:
①第3行和第5行的if表示的是递归的基准条件
②第10行,是顺时针打印矩阵中的元素。注意:它在递归调用之前执行,这说明:打印顺序是从外到内的。(对递归的理解)说白了,就是先打印了外层的元素,再递归调用打印内层元素。
③第10行执行递归调用。因为打印的是更里层的元素,故待打印的元素的位置:行数增加1,列数减少1
每打印一圈之后,数组的维数降低2
三,完整代码实现
扩展:根据上面的思路,我们也可以构造一个蛇形矩阵。
count是个静态全局变量,初始值为1
给定一个N x N 的矩阵(方阵),按照从外向里的以顺时针方向依次打印矩阵中的每个元素。
比如:一个 3X3的矩阵如下:打印顺序为:1 2 3 6 9 8 7 4
{1,2,3}
{4,5,6}
{7,8,9}
打印方向如下:
二,算法思路
可以采用递归的方式来打印整个矩阵中的元素。
首先按顺时针方向打印最外层的元素,然后再递归地打印更里层的元素。
对于N维方阵而言:每打印一圈之后,维数降低2。当N为奇数时,最终递归到 1x1矩阵。当N为偶数时,最终递归到N=0
因此,递归的基准条件:当N==0 时,直接返回。 N==1时,打印矩阵中唯一的那个元素,然后返回。
具体代码如下:
private static void printArray(int[][] arr, int row, int column, int n){ //base condition if(n == 0) return; if(n == 1){ print(arr[row][column]); return; } printElementClockWise(arr, row, column);//clockwise print element printArray(arr, row + 1, column - 1, n - 2);//recursively call }
①第3行和第5行的if表示的是递归的基准条件
②第10行,是顺时针打印矩阵中的元素。注意:它在递归调用之前执行,这说明:打印顺序是从外到内的。(对递归的理解)说白了,就是先打印了外层的元素,再递归调用打印内层元素。
③第10行执行递归调用。因为打印的是更里层的元素,故待打印的元素的位置:行数增加1,列数减少1
每打印一圈之后,数组的维数降低2
三,完整代码实现
public class PrintArray { public static void printArray(int[][] arr){ if(arr == null || arr.length == 0) return; printArray(arr, 0, arr.length - 1, arr.length); } private static void printArray(int[][] arr, int row, int column, int n){ //base condition if(n == 0) return; if(n == 1){ print(arr[row][column]); return; } printElementClockWise(arr, row, column);//clockwise print element printArray(arr, row + 1, column - 1, n - 2);//recursively call } /** * 顺时针由外到内打印数组 * @param arr * @param row * @param column */ private static void printElementClockWise(int[][] arr, int row, int column){ for(int i = row; i <= column; i++) print(arr[row][i]); for(int i = row + 1; i <= column; i++) print(arr[i][column]); for(int i = column - 1; i >= row; i--) print(arr[column][i]); for(int i = column - 1; i > row; i--) print(arr[i][row]); } private static void print(int i){ System.out.print(i + " "); } //for test purpose public static void main(String[] args) { int[][] arr = { {1,2,3}, {4,5,6}, {7,8,9} }; System.out.println("arr.length:" + arr.length); printArray(arr); System.out.println(); int[][] arr2 = { {1,2,3,10}, {4,5,6,11}, {7,8,9,12}, {13,14,15,16} }; printArray(arr2); int[][] arr3 = {}; System.out.println(arr3.length); printArray(arr3); printArray(null); } }
扩展:根据上面的思路,我们也可以构造一个蛇形矩阵。
private void print(int[][] arr, int row, int col){ for(int i = row; i <= col; i++) arr[row][i] = count++; // System.out.print(arr[row][i]); for(int i = row+1; i <= col; i++) arr[i][col] = count++; // System.out.print(arr[i][col]); for(int i = col-1; i >= row; i--) arr[col][i] = count++; // System.out.print(arr[col][i]); for(int i = col-1; i > row; i--) arr[i][row] = count++; // System.out.print(arr[i][row]); }
count是个静态全局变量,初始值为1
相关文章推荐
- 识别'低效执行'的SQL语句
- webrtc成功编译(windows vs2015)
- 二叉树前、中、后及层次非递归遍历
- 单线程生产,多线程消费
- android 目录文件
- JavaScript 各种遍历方式详解
- [platform]linux platform device/driver(二)--Platform Device和Platform_driver注册过程之详细代码
- C++中istream_iterator 与 ostream_iterator的用法
- Android学习笔记之进度条
- Webx
- php的tingkphp框架下的前后交互过程
- Guava base -- Preconditions
- 传世
- 学术诚信与道德
- 配置环境变量
- Linux shell 指令
- 负载均衡之haproxy详解
- 验证struts2中action的查找路径
- 升级内核
- 洛谷 P1025 数的划分