亳州市网站建设_网站建设公司_服务器部署_seo优化
2026/1/18 10:47:53 网站建设 项目流程

54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 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]

【思路】

首先设定上下左右边界

  • 取左边界到右边界,以upper为行,i为列从left到right 将上边界下移++upper
  • 取上边界到下边界,以right为列,i为行从upper到down 将右边界左移--right
  • 取右边界到左边界,以down为行,i为列从right到left 将下边界上移--down
  • 取下边界到上边界,以left为列,i为行从down到upper 将左边界右移++left
 1 class Solution {
 2     public List<Integer> spiralOrder(int[][] matrix) {
 3         int m=matrix.length, n=matrix[0].length, left=0, right=n-1, upper=0, down=m-1;
 4         List<Integer> res = new ArrayList<>();                                
 5         int i = 0;
 6 
 7         while(true){
 8             for(i=left; i<=right; i++) res.add(matrix[upper][i]);
 9             upper++;   // upper遍历完毕,upper++  边界下移
10             if(upper>down)break;
11             for(i=upper; i<=down; i++) res.add(matrix[i][right]);
12             right--;   // right 遍历完毕,right--  左移
13             if(right<left)break;
14             for(i=right; i>=left; i--) res.add(matrix[down][i]);
15             down--;    // down遍历完毕,down--    上移
16             if(down<upper) break;
17             for(i=down; i>=upper; i--) res.add(matrix[i][left]);
18             left++;    // left 遍历完毕  left++    右移
19             if(left>right) break;
20         }
21         return res;
22     }
23 }
View Code

 

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询