題目描述
給你一個正整數 n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。
示例 1:
輸入:n = 3
輸出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
輸入:n = 1
輸出:[[1]]
解題思路
此題相對上一題leetcode54更簡單,因為邊界更可控,是正方形,可以從外圈向中央逼近,重點是邊界的處理,避免重復
代碼實現
class Solution {public int[][] generateMatrix(int n) {int[][] r = new int[n][n];int lr = 0, rr = n -1, sum = n* n;fill(r, lr, rr, 1, sum);return r;}private void fill(int[][] r, int lr, int rr, int n, int sum) {if(n > sum) return;if(lr > rr) return;for (int i = lr; i <= rr; i++) {r[lr][i] = n;n++;}for (int i = lr+1; i <= rr; i++) {r[i][rr] = n;n++;}for (int i = rr-1; i >= lr; i--) {r[rr][i] = n;n++;}for (int i = rr-1; i > lr; i--) {r[i][lr] = n;n++;}fill(r, lr+1, rr-1, n, sum);}
}