剑指offer面试题20 顺时针打印矩阵

考察点

java 复制代码
二维数组的遍历

知识点

题目

分析

本题目要求从外向里顺时针打印每一个数字,这个题目也是二维数组的遍历,只要涉及到遍历就需要知道循环终止的条件是什么,以及每次怎么迭代。从外向里一圈一圈打印,所以通过审题也可以想到循环终止的条件就是遍历到最里面的那一圈数字,可以用start代表当前遍历到的圈数(同时也可以代表数组左上角元素的横纵坐标),从0开始,这里可以通过归纳的方式找到数字之间的规律,循环终止的条件就是数组的行数和列数都大于2倍*start。那么接下来需要考虑的是如何打印每一圈数字,从左往右直接打印即可,从上到下打印是有条件的,即start需要小于数圈对应的纵坐标(如果不小于则最中间那个圈可能是个点或者一行数字),从右往左打则要求start小于数圈对应的纵坐标,和横坐标(如果不小于则最中间那个圈可能是个点或者一列数字),从下往上打则要求start小于数圈对应的纵坐标-1(如果不小于可能是一行数字),和横坐标(如果不小于可能是个点)

个人认为面试不太会可能考这种题目,不具有代表性

java 复制代码
public class Twenty {
	public static void main(String[] args) {
		int arr[][] = {
			{1,2,3,4,5},
			{6,7,8,9,10},
			{11,12,13,14,15},
		};
		circlePrint(arr,arr.length,arr[0].length);
		System.out.println();
		int brr[][] = {
			{1,2,3,4},
			{5,6,7,8},
			{9,10,11,12},
			{13,14,15,16},
		};
		circlePrint(brr,brr.length,brr[0].length);
	}
	static void circlePrint(int[][] arr,int rows,int cols) {
		if (arr == null || rows <= 0 || cols <= 0) {
			return;
		}
		int start = 0;
		while(rows > start * 2 && cols > start * 2) {
			printCircle(arr,rows,cols,start);
			start++;
		}
	}
	static void printCircle(int[][] arr,int rows,int cols,int start) {
		int endX = cols - start - 1;
		int endY = rows - start - 1;
		for (int i = start;i <= endX; i++) {
			System.out.println(arr[start][i]);
		}
		//
		if (start < endY) {
			for (int i = start + 1;i <= endY;i++) {
				System.out.println(arr[i][endX]);
			}
		}
		if (start < endX && start < endY) {
			for (int i = endX - 1;i>=start;i--) {
				System.out.println(arr[endY][i]);
			}
		}
		if (start < endX && start < endY - 1) {
			for (int i = endY - 1;i >= start + 1;i--) {
				System.out.println(arr[i][start]);
			}
		}
	}
}
相关推荐
qq_12498707539 分钟前
Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
java·开发语言·spring boot·毕业设计
和光同尘@24 分钟前
74. 搜索二维矩阵(LeetCode 热题 100)
数据结构·c++·线性代数·算法·leetcode·职场和发展·矩阵
qq_124987075338 分钟前
Java+SpringBoot+Vue+数据可视化的美食餐饮连锁店管理系统
java·spring boot·毕业设计·美食
zl_dfq41 分钟前
数据结构之【顺序表简介】
数据结构·顺序表
code bean1 小时前
【C# 数据结构】队列 FIFO
开发语言·数据结构·c#
一个 00 后的码农1 小时前
25会计研究生复试面试问题汇总 会计专业知识问题很全! 会计复试全流程攻略 会计考研复试真题汇总
经验分享·考研·面试·面试问题·25考研·考研复试·会计复试
m0_748248231 小时前
Spring Framework 中文官方文档
java·后端·spring
Vacant Seat1 小时前
矩阵-矩阵置零
java·矩阵·二维数组
先睡1 小时前
Spring MVC的基本概念
java·spring·mvc
柠石榴1 小时前
【练习】【二分】力扣热题100 34. 在排序数组中查找元素的第一个和最后一个位置
c++·算法·leetcode·二分