【LeetCode59.螺旋矩陣II】——二維數(shù)組遍歷

59.螺旋矩陣II

題目鏈接

給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1n^2^所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。

示例 1:

輸入:n = 3
輸出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

輸入:n = 1
輸出:[[1]]

提示:

  • 1 <= n <= 20

思路:

本題總體而言沒(méi)有什么特定的算法,算是對(duì)于二維數(shù)組的一次運(yùn)用,關(guān)鍵點(diǎn)就是要不重不漏地進(jìn)行遍歷賦值。

代碼:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定義一個(gè)二維數(shù)組
        int startx = 0, starty = 0; // 定義每循環(huán)一個(gè)圈的起始位置
        int loop = n / 2; // 每個(gè)圈循環(huán)的次數(shù)
        int mid = n / 2; // 矩陣中間的位置,用于處理n為奇數(shù)時(shí)的情況
        int count = 1; // 用來(lái)給矩陣中每一個(gè)空格賦值,從1開始
        int offset = 1; //每次循環(huán)縮小邊界
        int i, j;//用于進(jìn)行循環(huán)
        while (loop--) { //進(jìn)行l(wèi)oop次循環(huán)
            i = startx;
            j = starty;

            // 填充上行從左到右(左閉右開)
            for (j = starty; j < n - offset; j++) {
                res[startx][j] = count++;
            }
            // 填充右列從上到下(左閉右開)
            for (i = startx; i < n - offset; i++) {
                res[i][j] = count++;
            }
            // 填充下行從右到左(左閉右開)
            for (; j > starty; j--) {
                res[i][j] = count++;
            }
            // 模擬填充左列從下到上(左閉右開)
            for (; i > startx; i--) {
                res[i][j] = count++;
            }

            // 第二圈開始的時(shí)候,起始位置要各自加1
            startx++;
            starty++;

            // offset 控制每一圈里每一條邊遍歷的長(zhǎng)度
            offset += 1;
        }

        // 如果n為奇數(shù)的話,需要單獨(dú)給矩陣最中間的位置賦值
        if (n % 2) {
            res[mid][mid] = count;
        }
        return res;
    }
};

為了做到不重不漏,就要整體都按照一定的順序進(jìn)行賦值。這里就用到了統(tǒng)一使用左閉右開區(qū)間的思想,每一輪賦值時(shí)統(tǒng)一給左邊界賦值,右邊界不賦值。

參考教程:一入循環(huán)深似海 | LeetCode:59.螺旋矩陣II_嗶哩嗶哩_bilibili

往期回顧:
LeetCode977.有序數(shù)組的平方
LeetCode844.比較含退格的字符串
LeetCode283.移動(dòng)零
LeetCode27.移除元素
LeetCode26.刪除有序數(shù)組中的重復(fù)項(xiàng)
LeetCode209.長(zhǎng)度最小的子數(shù)組
LeetCode904. 水果成籃
LeetCode242.有效的字母異位詞
LeetCode76.最小覆蓋子串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容