LeetCode-054-螺旋矩陣

螺旋矩陣

題目描述:給你一個 mn 列的矩陣 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 + " ");
        }
    }
}
【每日寄語】 願你今天溫柔,優秀,可愛,果斷,一塵不染。
相關文章
相關標籤/搜索