• 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. }

  • 相关阅读:
    蓝牙BQB PTS工具的安装
    Rocky Linux怎么安装mysql
    【PAT甲级】1131 Subway Map
    软件测试面试(三)
    旅游推荐系统
    利用canvas实现根据背景图片主色调动态展示字体颜色
    使用qt5.6.3的注意事项:
    java毕业设计在线教学评比平台Mybatis+系统+数据库+调试部署
    易基因|DNA甲基化和单细胞RNA-seq联合揭示空气污染对复发性流产的表观遗传影响
    【笔试题】【day17】
  • 原文地址:https://blog.csdn.net/jiayoudangdang/article/details/125889540