首页 > 其他 > 详细

JZ19 顺时针打印矩阵

时间:2021-09-02 07:25:24      阅读:18      评论:0      收藏:0      [点我收藏+]

描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
则依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]

示例1

输入:
[[1,2],[3,4]]
返回值:
[1,2,4,3]


===========================================================================================================================================


解题思路:((n - 1) > 2 * i)
  本题是通过判断行列哪一个短,哪一个短,就用哪一个可以得到最低的顺时针打印次数,再依次打印每个边,注意要在判断条件中加上当前((n - 1) > 2 * i)是为了防止行列值差距过大,从而导致重复打印。

代码:
  
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
if(matrix.length == 0 || matrix[0].length == 0)return res;
int n = matrix.length, m = matrix[0].length;
if(n == 1){
for(int vals : matrix[0])res.add(vals);
return res;
}else if(m == 1){
for(int i = 0; i < n; i ++)
res.add(matrix[i][0]);
return res;
}
int t = n >= m? m : n;
int q = t % 2 == 0 ? t/2 : t/2 + 1;

for(int i = 0; i < q; i ++){
//从左往右打印
for(int j = i; j < m - i; j ++)
res.add(matrix[i][j]);
//从上往下打印
for(int j = i + 1; j < n - i; j ++)
res.add(matrix[j][m - i - 1]);
//从左往右打印
for(int j = m - i - 2; j > i && ((n - 1) > 2 * i); j --)
res.add(matrix[n - i - 1][j]);
//从下往上打印
for(int j = n - i - 1; j > i && ((m - 1) > 2 * i); j --)
res.add(matrix[j][i]);
}
return res;
}
}


JZ19 顺时针打印矩阵

原文:https://www.cnblogs.com/hddandelion/p/15207370.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!