• LeetCode--054--区螺旋矩阵(java)


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

    示例 1:

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

    示例 2:

    输入:
    [
      [1, 2, 3, 4],
      [5, 6, 7, 8],
      [9,10,11,12]
    ]
    输出: [1,2,3,4,8,12,11,10,9,5,6,7]

    思路:把每次打印看成是打印当前矩阵的外圈,当前矩阵打印完成后,找到其子矩阵,继续打印子矩阵的外圈。
    比如例子1的矩阵 1 2 3
    4 6
    7 8 9
    如何确定一个矩阵,只需要确定其左上角的点和右下角的点,我们把左上角的点即为(tR,tC) 把右下角的点记为(dR,dC)
    (0,0) (2,2)即为上面矩阵的两个点,打印一圈后,左上角的点往右下移动一个位置,右下角的点往左上移动一个位置,停止条件为,左上角的点跑到右下角点的右边或者下边。
     1 class Solution {
     2     public List<Integer> spiralOrder(int[][] matrix) {
     3         List<Integer> list = new ArrayList<>();
     4         if(matrix.length == 0 || matrix == null)return list;
     5         int tR = 0;
     6         int tC = 0;
     7         int dR = matrix.length - 1;
     8         int dC = matrix[0].length - 1;
     9         while (tR <= dR && tC <= dC){
    10             printEdge(matrix,tR++,tC++,dR--,dC--,list);
    11         }
    12         return list;
    13     }
    14     public static void printEdge(int[][] m,int tR,int tC,int dR,int dC,List<Integer> list){
    15         if(tR == dR){
    16             for(int i = tC;i <= dC;i++){
    17                 list.add(m[tR][i]);
    18             }
    19         }else if (tC == dC){
    20             for(int i = tR;i <= dR;i++){
    21                 list.add(m[i][tC]);
    22             }
    23         }else{
    24             int curC = tC;
    25             int curR = tR;
    26             while(curC != dC){
    27                 list.add(m[tR][curC]);
    28                 curC++;
    29             }
    30             while (curR != dR){
    31                 list.add(m[curR][dC]);
    32                 curR++;
    33             }
    34             while(curC != tC){
    35                 list.add(m[dR][curC]);
    36                 curC--;
    37             }
    38             while(curR != tR){
    39                 list.add(m[curR][tC]);
    40                 curR--;
    41             }
    42         }
    43     }
    44 }

    python:

     1 class Solution:
     2     def draw(self,tR,tC,dR,dC,matrix,lists):
     3         flag = False
     4         i = tC
     5         j = tR
     6         while(i <= dC):           #向右走
     7             lists.append(matrix[tR][i])
     8             print(i)
     9             i+=1
    10         i-=1
    11         j+=1
    12         while(j <= dR):                  #向下走
    13             
    14             lists.append(matrix[j][dC])
    15             j+=1
    16         j-=1
    17         i-=1
    18         if j == dR and dR != tR:         #向左走
    19             while(i >=tC):
    20                 lists.append(matrix[dR][i])
    21                 i-=1
    22                 flag = True
    23             i += 1
    24         j -= 1
    25         if i == tC and flag:     #没往左走则不往上走   
    26             while(j > tR):
    27                 lists.append(matrix[j][tC])
    28                 j-=1
    29             j += 1
    30     def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    31         if len(matrix) == 0:
    32             return []
    33         if len(matrix[0]) == 1:
    34             return [matrix[i][0] for i in range(len(matrix))]  #一列的情况
    35         if len(matrix) == 1:
    36             return [matrix[0][i] for i in range(len(matrix[0]))]  #一行的情况
    37         tR = tC = 0
    38         dR = len(matrix) - 1
    39         dC = len(matrix[0]) - 1
    40         lists = []
    41         while dR >= tR and dC >= tC:
    42             self.draw(tR,tC,dR,dC,matrix,lists)
    43             tR += 1
    44             tC += 1
    45             dR -= 1
    46             dC -= 1
    47         return lists

     参考:程序员代码面试指南

    2019-05-13 15:47:27

    2019-08-27 20:08:59

  • 相关阅读:
    23种设计模式之单例模式
    Java基础之IO技术(一)
    spark利用yarn提交任务报:YARN application has exited unexpectedly with state UNDEFINED
    linux配置了dns后导致mysql远程连接慢问题
    发布网站后localhost可以访问ip不行
    electron编译sqlite3
    vscode文件树缩进
    js判断浏览器类型
    vue可复用slide动画
    vscode使用formate格式化less遇到的坑
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10857053.html
Copyright © 2020-2023  润新知