提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、力扣59. 螺旋矩阵 II
- 二、力扣54. 螺旋矩阵
前言
相信大家有遇到过这种情况: 感觉题目的边界调节超多,一波接着一波的判断,找边界,拆了东墙补西墙,好不容易运行通过了,代码写的十分冗余,毫无章法,其实真正解决题目的代码都是简洁的,或者有原则性的,大家可以在这道题目中体会到这一点
一、力扣59. 螺旋矩阵 II
class Solution {public int[][] generateMatrix(int n) {int[][] res = new int[n][n];for(int a = 1,L = 0, R = n-1, U = 0, D = n-1; a <= n * n; ){for(int i = L; i <= R; i ++){res[U][i] = a ++;}U ++;for(int i = U; i <= D; i ++){res[i][R] = a ++;}R --;for(int i = R; i >= L; i --){res[D][i] = a ++;}D --;for(int i = D; i >= U; i --){res[i][L] = a ++;}L ++;}return res;}
}
二、力扣54. 螺旋矩阵
class Solution {public List<Integer> spiralOrder(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;List<Integer> res = new LinkedList<>();for(int L = 0, R = n-1, U = 0, D = m-1, a = 1; a <= m * n; ){for(int i = L; i <= R && a <= m * n; i ++){res.add(matrix[U][i]);a ++;}U ++;for(int i = U; i <= D && a <= m * n; i ++){res.add(matrix[i][R]);a ++;}R --;for(int i = R; i >= L && a <= m * n; i --){res.add(matrix[D][i]);a ++;}D --;for(int i = D; i >= U && a <= m * n; i --){res.add(matrix[i][L]);a ++;}L ++;}return res;}
}