【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵
立志用最少的代码做最高效的表达
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
核心:本质为画图推导题,将矩阵拆分为四个部分考虑,逐个击破!!!
public class 剑指Offer29_顺时针打印矩阵 {static class Solution {public int[] spiralOrder(int[][] matrix) {// 本质是规律题,拆分为四个部分考虑!!!int row = matrix.length;if(row == 0) return new int[0];int col = matrix[0].length;int[] res = new int[col*row];int num = 0; // res数组的下标int up = 0, right = col-1, down = row-1, left = 0; // 四个坐标的参数while(num < col*row) {// 上for(int i = up; (i<=right) && (num<col*row); i++) // 多加的限定条件,为了防止越界访问,单行或单列的情况res[num++] = matrix[up][i];up++;// 右for(int i = up; (i<=down) && (num<col*row); i++)res[num++] = matrix[i][right];right--;// 下for(int i = right; (i>=left) && (num<col*row); i--)res[num++] = matrix[down][i];down--;// 左for(int i = down; (i>=up) && (num<col*row); i--)res[num++] = matrix[i][left];left++;}return res;}}public static void main(String[] args) {// int[][] m = new int[][]{{1,2,3},{4,5,6},{7,8,9}};// 奇数次序列
// int[][] m = new int[][]{{1,2,3,4,5},{16,17,18,19,6},{15,24,25,20,7},{14,23,22,21,8},{13,12,11,10,9}};// 偶数次序列
// int[][] m = new int[][]{{1,2,3,4},{12,13,14,5},{11,16,15,6},{10,9,8,7}};// 只有1个数
// int[][] m = new int[][]{{1}};// 行列不等
// int[][] m = new int[][]{{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};// 只有一行int[][] m = new int[][]{{1,2,3,4}};Solution solution = new Solution();int[] nums = solution.spiralOrder(m);for(int i = 0; i < nums.length; i++) {System.out.println(nums[i] + " ");}}
}
天若有情天亦老,人间正道是沧桑。 ——教员
【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵相关推荐
- 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
<LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...
- 剑指 Offer 29. 顺时针打印矩阵
题目 剑指offer的解题思路 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上. 打印每一圈的起点(startX,startY)分别为(0,0),(1,1) ...
- 打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵
本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrix ...
- 剑指offer——29.顺时针打印矩阵(不熟)
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 ...
- 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]
链接 https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 耗时 解题:38 min 题解:10 min 题意 输入一 ...
- 剑指offer 29 顺时针打印矩阵(可逆时针,任一点开始)
原书上写的解太麻烦了,而且还没有扩展性(比如从右上角开始打印,或者逆时针打印). 此外多个for循环的起止点也让人头晕,每个方向都要单独判断步进方向,因此代码也缺少优雅性. 这里我用direction ...
- leetcode剑指 Offer 29. 顺时针打印矩阵
一:题目 二:上码 class Solution {public:vector<int> spiralOrder(vector<vector<int>>& ...
- 【算法】剑指 Offer 29. 顺时针打印矩阵
1,概述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6
- 剑指Offer(29)顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
最新文章
- ​2019年最新华为、BAT、美团、头条、滴滴面试题目及答案汇总
- 迭代法求解线性方程组
- CentOS+Nginx+PHP+Mysql(3)(转)
- ajax实现php验证码验证码,PHP验证码之Ajax验证实现方法_PHP教程
- 电子计算机的大脑核心是什么,戴君惕《人脑与电脑》初中说明文阅读题及答案...
- php制作404,利用thinkphp怎么制作一个404跳转页面
- win2K/win2003终端服务器超出最大允许连接数
- 等概率随机函数的实现(对立事件的产生)
- 机器学习笔记——偏差vs方差
- android开发ViewPager按比例显示图片(显示下一张图片的一部分)
- 笔记本电脑运行卡顿的真正原因和解决方案
- 745. 前缀和后缀搜索(每日一难phase2--day27)
- edge扩展下载失败解决办法
- 普华i-VirtualApp应用交付系统介绍
- Linux安装Rar软件与压缩、解压方法
- QQ邮箱不显示图片解决方案
- conda search cuda后没有版本10的问题
- pmsm什么意思_PMSM是什么意思
- Lucene搜索理论
- 滑稽树下你和我Average distance(树形dp求任意两点距离之和)