打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵

本文参考自《剑指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

return;

//仅一行

if(endY==start) {

for(int i=start;i<=endX;i++) {

System.out.print(matrix[start][i]+" ");

}

return; //记得结束

}

//仅一列

if(endX==start) {

for(int i=start;i<=endY;i++) {

System.out.print(matrix[i][start]+" ");

}

return; //记得结束

}

//打印边界

for(int i=start;i<=endX;i++) {

System.out.print(matrix[start][i]+" ");

}

for(int i=start+1;i<=endY;i++) {

System.out.print(matrix[i][endX]+" ");

}

for(int i=endX-1;i>=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) {

vectorres;

res.clear();

int row=matrix.size();//行数

int collor=matrix[0].size();//列数

//计算打印的圈数

int circle=((row

for(int i=0;i

//从左向右打印

for(int j=i;j

res.push_back(matrix[i][j]);

//从上往下的每一列数据

for(int k=i+1;k

res.push_back(matrix[k][collor-1-i]);

//判断是否会重复打印(从右向左的每行数据)

for(int m=collor-i-2;(m>=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.打印矩阵的圈数与其列数或者行数的一半有关。简单但要能想到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具有JDK 12精简数字格式的自定义精简数字模式

帖子“ 紧凑数字格式到JDK 12 ”已经成为java subreddit线程上讨论的主题 。 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数字和显示的紧凑数字模式。 可以通过使用CompactNumberFormat.setMinimumFractionDigits(int)来解决精度数字问题&#xff0c;该方法…

【渝粤题库】陕西师范大学100071教育学作业(高起本)

单选题 1、中小学为实现教育目标&#xff0c;与课堂教学相配合&#xff0c;在课堂教学以外对学生身心实施多种影响的正规教育活动&#xff0c;就是( ) A、课堂作业 B、课外作业 C课外活动 D、课外参观 2、学生的行为规范、公民意识、劳动态度等属于( ) A、心理素质 B、生理素质…

java 面试for循环_一个基础的for循环面试题

下面的这段程序主要考察的就是for循环的基础&#xff0c;输出什么&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;1、 public class test {2、3、 /**4、 * param args5、 */6、 public static void main(String[] args) {7、 // TODO Auto-generat…

java浏览文件夹_一个用java实现简单的文件浏览器

[java]代码库import java.awt.*;import java.awt.event.*;import java.net.URL;import javax.swing.*;//文件浏览器public class HTTPBrowserDemo extends JFrame {private static final long serialVersionUID -5794029080886644211L;JTextField jtfAddress; // 输入文件地址…

【渝粤题库】陕西师范大学151203 初级会计学作业(笔试题型)

《初级会计学》作业 一、单项选择 1&#xff0e;下列会计要素&#xff0c;属于静态要素的有 &#xff08; &#xff09; A&#xff0e;负债 B&#xff0e;收入 C&#xff0e;费用 D&#xff0e;利润 2&#xff0e; 下列项目中&#xff0c;属于流动负债的有 &#xff08; &#…

【渝粤题库】陕西师范大学152208 公共危机管理

陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 陕西师范大学 内 部 题 库 教育 &#xf…

【渝粤题库】陕西师范大学164109人力资源管理 作业(高起专)

《人力资源管理》作业 一、单选题 在企业成长过程中&#xff0c;&#xff08; &#xff09;因素发挥着核心作用。 A 技术 B资金 C市场 D人力资源现代人力资源管理强调&#xff08; &#xff09;。 A 以 “事为中心” B 将员工视为负担与成本 C强调“控制” D强调对人的开发和管…

java快速排序算法_JAVA版排序算法之快速排序示例

本文实例讲述了JAVA快速排序实现方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;package com.ethan.sort.java;import java.util.Arrays;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class QuickSort {public static &g…

java奥运会安排赛程问题_记录奥运-当今五大Java记录框架之间的竞赛

java奥运会安排赛程问题开发人员&#xff1a;Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实际上是每个服务器端应用程序中古老且固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些…

【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)

《社会保险学》作业 一、单选题 1、劳动者参加&#xff08;&#xff09;不需要缴纳任何保险费&#xff0c;而且享受待遇不受年龄、工龄、缴费年限、性别等条件的限制。 A、养老保险 B、医疗保险 C、工伤保险 D、失业保险1948年正式宣 2、保障社会安全的最后一道防线是&#xff…

【渝粤题库】陕西师范大学189202 品牌管理 作业(专升本)

一、名词解释 1、商标 2、品牌个性 3、品牌接触点 4、品质认知 5、品牌 6、品牌联想 7、品牌联合 8、品牌经理制 9、品牌形象 10、品牌杠杆力 11、品牌审计 12、投射法 13、品牌保护 二、 选择填空 A. 消费者 B. 体验 C.品牌定位 D. 品牌标识 E.反比 F. 正比 G.伞型品牌策略 H.…

【渝粤题库】陕西师范大学200311常微分方程作业(高起本)

《常微分方程》作业 一&#xff0e;求解下列方程 1&#xff0e;求方程之通解; 2&#xff0e;求方程之通解&#xff1b; 3&#xff0e;解初值问题&#xff1b; 4&#xff0e;求方程 之通解&#xff1b; 5&#xff0e;求方程 的通解&#xff1b; 6. 求方程 的通解&#xff1b; 7…

为什么在子类中不重写超类的实例变量

当我们在父类和子类中创建一个具有相同名称的变量&#xff0c;并尝试使用持有子类对象的父类引用访问它时&#xff0c;我们会得到什么&#xff1f; 为了理解这一点&#xff0c;让我们考虑下面的示例&#xff0c;其中在Parent和Child类中声明一个具有相同名称的变量x 。 class…

【渝粤题库】陕西师范大学200681C语言程序设计 作业(高起专、高起本)

一、单选题 1&#xff0e;有如下程序段&#xff0c;其执行后的输出结果为&#xff08; &#xff09;。 main() {int i8; while(i>1) {–i; printf(“%d”,i–);} } A. 753 B. 7531 C. 8642 D. 864 2&#xff0e;在下列的数组定义中&#xff0c;哪一个有语法错误&#xff08;…

【渝粤题库】陕西师范大学201041德育论 作业(专升本)

《德育论》作业 一、单选题 1.德育过程的实质是&#xff08;  &#xff09;  A.将学生的思想品德认识转化为品德行为   B.提高学生自我教育、自我修养的自觉性  C.提高学生对客观世界的认识  D.教育者将一定社会的思想道德规范转化为受教育者个体的思想品德 2.大众传媒的…

【渝粤题库】陕西师范大学201661英语阅读(二)作业(高起专)

陕西师范大学 内 部 题 库 教育 &#xff08;yuyueshool&#xff09; 编制 《阅读&#xff08;二&#xff09;》作业 I.Words DIRECTIONS: Read the sentence given with each word and choose the best meaning for it. 1.injure Wooden spears or swords should be used on…

cocos lua调用java_【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(三)

上周五下班前&#xff0c;打包成功了。我很高兴&#xff0c;周六去踢场足球&#xff0c;周日去现场看了最后一分钟掉球的恒大&#xff0c;度过了一个愉快的周末。然后&#xff0c;噩梦的周一开始了。我再次打包&#xff0c;打算打包就安装&#xff0c;但结果是失败的。为何&…

github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库

github上java项目随着Java开发人员使用既成熟又高度发展的语言来工作&#xff0c;无论何时编写新代码&#xff0c;我们都将面临一个持续的困境–使用大家都在谈论的热门新技术&#xff0c;或者坚持使用久经考验的库&#xff1f; 由于Java应用程序的很大一部分是商业性质的&…

【渝粤题库】陕西师范大学202071 统计学 作业(专升本、高起本)

《统计学》作业 一、单项选择题 &#xff11;&#xff0e;对于占全国彩电总产量绝大比重的彩电企业进行生产基本情况全面调查这是&#xff08; &#xff09;   A、典型调查  B、普查    C、重点调查 D、抽样调查 &#xff12;&#xff0e;某地进行国有商业企业经营情况…

【渝粤题库】陕西师范大学202861 发展心理学 作业(专升本)

《发展心理学》作业 一、名词解释 发展心理学正强化心理社会的合法延缓期复演说负强化学习障碍图式溶血症抓握反射应答性行为观察学习多动症 二、填空题儿童动作发展的顺序是&#xff08;  &#xff09;、 &#xff08; &#xff09;、从大肌肉到小肌肉。&#xff08;  &…