JZ19 顺时针打印矩阵

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

大家好,欢迎来到IT知识分享网。

JZ19 顺时针打印矩阵

描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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,2],[3,4]] 

返回值:

[1,2,4,3] 

解析

本来吧,这种题也没什么特色,不想特意记一下。不过想了半天也没想出来,看了一眼题解恍然大悟,这种方法属实通俗易懂方便实现,所以还是记录了一下!

顺时针打印矩阵,即按照从左到右从上到下从右到左从下到上的顺序一直循环,直到打印完整个数组。这就出现了两个问题:如何按照顺序打印何时停止

核心思想为:已经打印过的一条路线后面就不需要了。定义四个变量,up 代表数组上边界、down 代表数组下边界、left 代表数组左边界、right 代表数组右边界。于是可以通过控制边界的值调整数组的大小,随着打印的进度缩小数组,最后数组缩小为不存在时(即上边界大于下边界,或左边界大于右边界),说明输出完成(何时停止)。

打印的顺序为:首先从左到右,即 up 不变,变量 ileft 增加到 right,当前的 up 边界就打印完了,将 up 加一,即上边界移动到下一行;再到从上到下,即 right 不变,变量 iup 增加到 down,当前的 right 边界就打印完了,将 right 减一,即右边界移动到左一行;剩下的从左到右、从下到上同理。

代码清单

public class Solution { 
    public ArrayList<Integer> printMatrix(int [][] matrix) { 
    ArrayList<Integer> result = new ArrayList<Integer>(); if(matrix == null) return result; // 数组上边界 int up = 0; // 数组下边界(行) int down = matrix.length-1; // 数组左边界 int left = 0; // 数组右边界(列) int right = matrix[0].length-1; while( true ){ 
    for(int i=left;i<=right;i++){ 
    result.add(matrix[up][i]); } up++; if(up>down) break; for(int i=up;i<=down;i++){ 
    result.add(matrix[i][right]); } right--; if(left>right) break; for(int i=right;i>=left;i--){ 
    result.add(matrix[down][i]); } down--; if(up>down) break; for(int i=down;i>=up;i--){ 
    result.add(matrix[i][left]); } left++; if(left>right) break; } return result; } } 

总结

对数组的操作属实头大,不过这种控制遍历数组走向的题目还是挺多见的,还是比较有思考意义的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120501.html

(0)
上一篇 2025-10-29 12:45
下一篇 2025-10-29 13:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信