1. 程式人生 > 其它 >nginx+uwsgi部署Django

nginx+uwsgi部署Django

順時針列印矩陣

題目

輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字。

示例 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]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof


著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。


解決方法

思路
  • 從題目示例可以看出,列印順序是 “從左到右,從上到下,從右到左,從下到上”
  • 可以設定四個邊界 left , top , right , bottom ,遍歷要求的列印順序。
  • 解題圖片和程式碼,圖片很清晰明瞭,程式碼也比自己的簡介
列印方向 1. 根據邊界列印 2. 邊界向內收縮 3. 是否列印完畢
從左向右 左邊界left ,右邊界 right 上邊界 top 加 1 是否 top > bottom
從上向下 上邊界 top ,下邊界bottom 右邊界 right 減 1 是否 l eft> right
從右向左 右邊界 right ,左邊界left 下邊界 bottom 減 1 是否 top> bottom
從下向上 下邊界 bottom ,上邊界top 左邊界 left 加 1 是否 left> right
class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length == 0) return new int[0];
        int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1, x = 0;
        int[] res = new int[(r + 1) * (b + 1)];
        while(true) {
            for(int i = l; i <= r; i++) res[x++] = matrix[t][i]; // left to right.
            if(++t > b) break;
            for(int i = t; i <= b; i++) res[x++] = matrix[i][r]; // top to bottom.
            if(l > --r) break;
            for(int i = r; i >= l; i--) res[x++] = matrix[b][i]; // right to left.
            if(t > --b) break;
            for(int i = b; i >= t; i--) res[x++] = matrix[i][l]; // bottom to top.
            if(++l > r) break;
        }
        return res;
    }
}