題目描述:給你一個
m
行n
列的矩陣matrix
,請按照 順時針螺旋順序 ,返回矩陣中的全部元素。java示例說明請見LeetCode官網。segmentfault
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/probl...
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。數組
首先,用row和column分別記錄matrix的行數和列數,count爲matrix全部的元素數量,初始化一個數量和matrix同樣的二維數組用來標記相應位置的數字是否已經遍歷到,初始化result記錄結果的順序,x和y記錄當前位置的索引位置,而後按照向右、向下、向左、向右的順序開始處理二維數組:網絡
- 向右:將y往右移動一位,判斷是否超過column的界限而且移動後的位置是否沒有遍歷過,若是符合條件,則將移動後的位置的值放入result中,而且將count減一,而且將該位置的標記位置爲true,直到往右移不動爲止;
- 向下:將x往下移動一位,判斷是否超過row的界限而且移動後的位置是否沒有遍歷過,若是符合條件,則將移動後的位置的值放入result中,而且將count減一,而且將該位置的標記位置爲true,直到往下移不動爲止;
- 往左:將y往左移動一位,判斷是否不小於0而且移動後的位置是否沒有遍歷過,若是符合條件,則將移動後的位置的值放入result中,而且將count減一,而且將該位置的標記位置爲true,直到往左移不動爲止;
- 往上:將上往左移動一位,判斷是否不小於0而且移動後的位置是否沒有遍歷過,若是符合條件,則將移動後的位置的值放入result中,而且將count減一,而且將該位置的標記位置爲true,直到往上移不動爲止。
重複上面的過程,知道count爲0即全部的數字都遍歷到爲止,返回result。url
import java.util.ArrayList; import java.util.List; public class LeetCode_054 { public static List<Integer> spiralOrder(int[][] matrix) { int row = matrix.length, column = matrix[0].length, count = row * column, x = 0, y = -1; boolean[][] flag = new boolean[row][column]; List<Integer> result = new ArrayList<>(); while (count > 0) { // 向右 while (y + 1 < column && !flag[x][y + 1]) { y = y + 1; result.add(matrix[x][y]); flag[x][y] = true; count--; } // 向下 while (x + 1 < row && !flag[x + 1][y]) { x = x + 1; result.add(matrix[x][y]); flag[x][y] = true; count--; } // 向左 while (y - 1 >= 0 && !flag[x][y - 1]) { y = y - 1; result.add(matrix[x][y]); flag[x][y] = true; count--; } // 向上 while (x - 1 >= 0 && !flag[x - 1][y]) { x = x - 1; result.add(matrix[x][y]); flag[x][y] = true; count--; } } return result; } public static void main(String[] args) { int[][] matrix = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; for (Integer integer : spiralOrder(matrix)) { System.out.print(integer + " "); } } }
【每日寄語】 願你今天溫柔,優秀,可愛,果斷,一塵不染。