[剑指Offer]29-顺时针打印矩阵-Java

题目链接

https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:

[

[ 1, 2, 3 ],

[ 4, 5, 6 ],

[ 7, 8, 9 ]

]

输出: [1,2,3,6,9,8,7,4,5]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/spiral-matrix

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路(方法二)(思路较优)

  • 记录矩阵当前上下左右边界,并维护。
  • 步骤:放入矩阵第一行,更新矩阵上边界,判断若上边界>下边界则完成矩阵遍历;放入矩阵最后一列...

代码(方法二)

class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ansList = new ArrayList<>();
if (matrix == null || matrix.length == 0) {
return ansList;
} // 定义上下左右边界
int l = 0;
int up = 0;
int r = matrix[0].length - 1;
int down = matrix.length - 1;
while (true) {
// 第一行
for (int i = l; i <= r; ++i) {
ansList.add(matrix[up][i]);
}
if (++up > down) {
break;
} // 最后一列
for (int i = up; i <= down; ++i) {
ansList.add(matrix[i][r]);
}
if (--r < l) {
break;
} // 最后一行
for (int i = r; i >= l; --i) {
ansList.add(matrix[down][i]);
}
if (--down < up) {
break;
} // 第一列
for (int i = down; i >= up; --i) {
ansList.add(matrix[i][l]);
}
if (++l > r) {
break;
}
}
return ansList;
}
}

解题思路(方法一)

用子矩阵的左上角和右下角代表子矩阵,循环打印子矩阵,打印子矩阵的最外圈。

循环最外圈时,先判子矩阵只剩一行/一列的情况。

代码(方法一)

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
int lR=0;
int lC=0;
int rR=matrix.length-1;
int rC=matrix[0].length-1;
int size=matrix.length*matrix[0].length;
ArrayList<Integer> circleAL=new ArrayList<Integer>(size);//
while(lR<=rR&&lC<=rC){
printCircle(matrix,lR++,lC++,rR--,rC--,circleAL);//
}
return circleAL;
} private void printCircle(int[][] matrix,int lR,int lC,int rR,int rC,ArrayList<Integer> circleAL){
if(lR==rR){
for(int j=lC;j<=rC;++j){
circleAL.add(matrix[lR][j]);//
}
}
else if(lC==rC){
for(int i=lR;i<=rR;++i){
circleAL.add(matrix[i][lC]);
}
}
else{
int i=lR;
int j=lC;
while(j!=rC){
circleAL.add(matrix[i][j]);
++j;
}
while(i!=rR){
circleAL.add(matrix[i][j]);
++i;
}
while(j!=lC){
circleAL.add(matrix[i][j]);
--j;
}
while(i!=lR){
circleAL.add(matrix[i][j]);
--i;
}
}
}
}
上一篇:maven入门(1-2)settings.xml


下一篇:Maven中settings.xml的配置项说明