博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】 剑指offer(29) 顺时针打印矩阵
阅读量:5010 次
发布时间:2019-06-12

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

本文参考自《剑指offer》一书,代码采用Java语言。

更多:  

题目 

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

思路

  每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归。每次打印矩阵的左上角的横纵坐标相同,即为start,而其余三个角的坐标都与行列数以及start有关,因此只需要for循环即可实现打印。

  当然,其实只要针对start进行循环判断,start*2的值小于行数和列数时才需要继续打印,这样,通过这个条件,可以用循环来打印每次的最外圈矩阵。

测试算例 

  多行多列,单行多列,多行单列,一个数的矩阵,空矩阵,null

Java代码

//题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。public class PrintMatrix {	public void printMatrix(int[][] matrix) {		if(matrix==null || matrix.length<=0)			return;		printMatrixInCircle(matrix, 0);	}			private void printMatrixInCircle(int[][] matrix,int start) {		int row=matrix.length;		int col=matrix[0].length;		int endX=col-1-start;		int endY=row-1-start;		if(endX
=start;i--) { System.out.print(matrix[endY][i]+" "); } for(int i=endY-1;i>=start+1;i--) { System.out.print(matrix[i][start]+" "); } //继续打印更内部的矩阵,令start+1 printMatrixInCircle(matrix, start+1); } public static void main(String[] args) { PrintMatrix demo = new PrintMatrix(); int[][] a= {
{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};// int[][] a= {};// int[][] a= {
{}};// int[][] a= {
{1}};// int[][] a= {
{1,2,3,4}};// int[][] a= {
{1},{2},{3},{4}};// int[][] a= {
{1,2,3},{4,5,6}};// int[][] a=null; demo.printMatrix(a); }

  

  下面的代码是来自的C++代码:1.采用的是循环;2.在打印一圈时,单行或者单列情况只需要在从右往左打印和从下往上打印时判断是否会出现重复打印(即后面两个for循环)。代码比较简洁。

/*解题思路:顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印,同样只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况*/class Solution {public:    vector
printMatrix(vector
> matrix) { vector
res; res.clear(); int row=matrix.size();//行数 int collor=matrix[0].size();//列数 //计算打印的圈数 int circle=((row
=i)&&(row-i-1!=i);m--) res.push_back(matrix[row-i-1][m]); //判断是否会重复打印(从下往上的每一列数据) for(int n=row-i-2;(n>i)&&(collor-i-1!=i);n--) res.push_back(matrix[n][i]);} return res; }};

  

收获

  1.打印一圈矩阵时,注意单行或者单列时是否会重复打印。

  2.每一圈矩阵左上角的横纵坐标相等,其余三个角的坐标可以由左上角坐标获得。

  3.打印矩阵的圈数与其列数或者行数的一半有关。简单但要能想到。

  

更多:  

  

转载于:https://www.cnblogs.com/yongh/p/9804640.html

你可能感兴趣的文章
MySQL学习点滴 --分区表
查看>>
4.6.1 测试基础
查看>>
洛谷 P2486 [SDOI2011]染色
查看>>
oo第三单元总结
查看>>
leetcode : Count and Say [基本功]
查看>>
洛谷 P2485 [SDOI2011]计算器 解题报告
查看>>
c#访问存储过程
查看>>
Slickflow.NET 开源工作流引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
查看>>
Node教程
查看>>
java将字段映射成另一个字段,关于 接口传参 字段不对应转换
查看>>
Redis
查看>>
字段和属性的区别
查看>>
HTTP(一)工作机制
查看>>
条形码扫描枪数据读取的问题
查看>>
$this->autoRender = false
查看>>
健壮的 Java 基准测试
查看>>
phpstorm查看类的继承关系
查看>>
git create clone(仓库)
查看>>
chmod修改文件权限的命令
查看>>
新博客牵至简书
查看>>