• LeetCode54螺旋矩阵、59螺旋矩阵II【灵活】


    目录

    LeetCode-54螺旋矩阵

    题目:

    思路:

    代码:

    LeetCode-59.螺旋矩阵II


    LeetCode-54螺旋矩阵

    题目:

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

    示例 1:

    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

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

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

    提示:

    • m == matrix.length
    • n == matrix[i].length
    • 1 <= m, n <= 10
    • -100 <= matrix[i][j] <= 100

    思路:

    • Java中二维数组的长度
      • int len1=a.length;     //表示一共有多少行(列长度)
      • int len2=a[i].length.    //表示一共有多少列(行长度)

    • 依然需要先确定区间的形式,注意,左闭右开的时候;
    • 需要找明白当前层数与起始位置、循环次数的关系;
    • 统计矩阵从外向内的层数,如果矩阵非空,那么它的层数至少为1层,向上取整;
      • int count = (Math.min(m, n) + 1) / 2;
    • 不可以是左闭右开!因为如果全都是左闭右开的时候,当存在奇数行或奇数列(或同时存在)的时候会直接因为开区间而被忽略;所以上侧和右侧左右全闭,下侧和左侧左右全开;

    代码:

    1. class Solution {
    2. public List spiralOrder(int[][] matrix) {
    3. List list = new ArrayList();
    4. // int len1=a.length; //表示一共有多少行(列长度)
    5. // int len2=a[i].length.//表示一共有多少列(行长度)
    6. if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
    7. return list;
    8. }
    9. // 行数,也就是列的长度
    10. int m = matrix.length;
    11. // 列数,也就是行的长度
    12. int n = matrix[0].length;
    13. // 记录层数,这个这层数与每次循环的次数、起始位置直接相关
    14. int i = 0;
    15. //统计矩阵从外向内的层数,如果矩阵非空,那么它的层数至少为1层,向上取整
    16. int count = (Math.min(m, n) + 1) / 2;
    17. // 从外部向内部遍历,逐层打印数据
    18. // 不可以是左闭右开!因为如果全都是左闭右开的时候,
    19. // 当存在奇数行或奇数列(或同时存在)的时候会直接因为开区间而被忽略
    20. // 所以这里在检测的时候必须保证右是闭的!
    21. while (i < count) {
    22. // 上侧,从左到右,行不变,列变,变化长度是列数,也就是行长度,左闭右闭
    23. for (int j = i; j <= n - i - 1; j++) {
    24. list.add(matrix[i][j]);
    25. }
    26. // 右侧,从上到下,列不变,行变,变化长度是行数,也就是列长度,左闭右闭
    27. for (int j = i + 1; j <= m - i - 1; j++) {
    28. list.add(matrix[j][(n - 1) - i]);
    29. }
    30. // 下侧,从右到左,行不变,列变,变到起始列停止,左右全开
    31. for (int j = (n - 1) - (i + 1); j >= i && (m - 1 - i != i); j--) {
    32. list.add(matrix[(m - 1) - i][j]);
    33. }
    34. // 左侧,从下到上,列不变,行变,变到起始行停止,左右全开
    35. for (int j = (m - 1) - (i + 1); j >= i + 1 && (n - 1 - i) != i; j--) {
    36. list.add(matrix[j][i]);
    37. }
    38. i++;
    39. }
    40. return list;
    41. }
    42. }

    LeetCode-59.螺旋矩阵II

    同理,只不过换成了正方形

    1. class Solution {
    2. public int[][] generateMatrix(int n) {
    3. int matrix[][] = new int[n][n];
    4. if(n==0)return matrix;
    5. int i=0;
    6. int index =1;
    7. int count = (n+1)/2;
    8. while(i
    9. // 上侧,从左到右,行不变,列变,变化长度是列数,也就是行长度,左闭右闭
    10. for (int j = i; j <= n - i - 1; j++) {
    11. matrix[i][j] = index++;
    12. }
    13. // 右侧,从上到下,列不变,行变,变化长度是行数,也就是列长度,左闭右闭
    14. for (int j = i + 1; j <= n - i - 1; j++) {
    15. matrix[j][(n - 1) - i] = index++;
    16. }
    17. // 下侧,从右到左,行不变,列变,变到起始列停止,左右全开
    18. for (int j = (n - 1) - (i + 1); j >= i && (n - 1 - i != i); j--) {
    19. matrix[(n - 1) - i][j] = index++;
    20. }
    21. // 左侧,从下到上,列不变,行变,变到起始行停止,左右全开
    22. for (int j = (n - 1) - (i + 1); j >= i + 1 && (n - 1 - i) != i; j--) {
    23. matrix[j][i] = index++;
    24. }
    25. i++;
    26. }
    27. return matrix;
    28. }
    29. }

  • 相关阅读:
    hdu 3549 Flow Problem(简单网络流Dinic)
    画图中编辑颜色47种颜色rgb格式
    上周热点回顾(2.19-2.25)
    51单片机STC89C52RC——3.1 数码管静态展示
    【Python】第十一课 模块
    TensorRT基础笔记
    (十三)Spring之JdbcTemplate
    网站内引入外链资源403无法正常加载?网页访问却又正常?
    drools的类型声明(Type declarations)
    前端性能优化之LightHouse
  • 原文地址:https://blog.csdn.net/jiayoudangdang/article/details/125889540