1. 螺旋矩陣
  2. 螺旋矩陣 - 力扣(LeetCode) https://leetcode.cn/problems/spiral-matrix/submissions/521329682/ 給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

示例 1:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出:[1,2,3,6,9,8,7,4,5] 1 2 示例 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] 1 2 提示:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 10

-100 <= matrix[i][j] <= 100

題解

這題和59. 螺旋矩陣 II差不多,但是因為行和列不同變得更復雜一些。

如果要了解59. 螺旋矩陣 II,可以去看刷題之Leetcode59題(超級詳細)-CSDN博客這篇博客

相對於59. 螺旋矩陣 II而言,有些改變:

循環的次數等於行和列中的最小值除以2

當行和列中的最小值是奇數,則會有沒有遍歷到的位置

如果行數大於列數,則會產生中間列沒有遍歷 如果列數大於等於行數,則會產生中間行沒有遍歷 中間行或中間列的位置mid = 行和列中的最小值除以二的值

中間行的最大下標的下一位為mid + 列數 - 行數 + 1

中間列的最大下標的下一位為mid + 行數 - 列數 + 1

從上到下列的終止條件是小於列數 - 停止下標(offSet)

從左到右遍歷行的終止條件是小於行數 - 停止下標(offSet)

相同的地方是:從右向左遍歷行和從下向上遍歷列的終止條件都是大於遍歷起點start 每次遍歷完start++,offSet++ 代碼

class Solution { public List ans = new ArrayList<>(); //列數 int columns = matrix[0].length; //行數 int rows = matrix.length; //遍歷起點 int start = 0; //循環的次數 行數和列數中的最小值除以二 int loop = Math.min(rows,columns) / 2; //未遍歷的中間列(行)的列(行)下標 int mid = loop; //終止條件 int offSet = 1; int i,j; while(loop-- > 0) { //初始化起點 i = j = start;

//從左往右
        for(; j < columns - offSet; j++)
            ans.add(matrix[i][j]);

        //從上往下
        for(; i < rows - offSet; i++)
            ans.add(matrix[i][j]);

        //從右往左
        for(; j > start; j--)
            ans.add(matrix[i][j]);
        
        //從下往上
        for(; i > start; i--)
            ans.add(matrix[i][j]);

        //每循環一次 改變起點位置
        start++;
        //終止條件改變
        offSet++;
    }

    //如果行和列中的最小值是奇數 則會產生中間行或者中間列沒有遍歷
    if(Math.min(rows,columns) % 2 != 0) {
        //行大於列則產生中間列
        if(rows > columns) {
            //中間列的行的最大下標的下一位的下標為mid + rows - columns + 1
            for(int k = mid; k < mid + rows - columns + 1; k++) {
                ans.add(matrix[k][mid]);
            }
        }else {//列大於等於行則產生中間行
            //中間行的列的最大下標的下一位的下標為mid + columns - rows + 1
            for(int k = mid; k < mid + columns - rows + 1; k++) {
                ans.add(matrix[mid][k]);
            }
        }
    }
    return ans;
}

} 一鍵獲取完整項目代碼 java

———————————————— 版權聲明:本文為CSDN博主「向着五星的方向」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_69748833/article/details/137512010