第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 54 螺旋矩陣 題解:螺旋矩陣的C++實(shí)現(xiàn)

標(biāo)簽:
C++

https://img1.sycdn.imooc.com/34dfef68085cad8d13870762.jpg

一、题目解读

LeetCode 54题“螺旋矩阵”要求将给定的二维矩阵元素按螺旋顺序(顺时针)排列为一维数组。例如,对于矩阵[[1,2,3],[4,5,6],[7,8,9]],输出应为[1,2,3,6,9,8,7,4,5]。题目考察对矩阵遍历路径的规划能力,需确保不重复访问元素且顺序正确。

二、解题思路

通过维护上下左右四条边界动态控制遍历方向。核心思想是:按层处理矩阵,每层分为上→右→下→左四个方向遍历,访问完当前方向后调整边界,直至所有元素被访问。这种方法避免复杂坐标计算,利用循环与边界判断实现简洁逻辑。

三、解题步骤

1. 初始化:判断矩阵是否为空,若为空直接返回空数组。

2. 定义边界:top=0, bottom=m-1, left=0, right=n-1(m为行数,n为列数)。

3. 循环遍历:

○ 上层:从左到右遍历,res添加matrix[top][i],top++更新下边界。

○ 右层:从上到下遍历,添加matrix[i][right],right--更新左边界。

○ 下层:从右到左遍历,添加matrix[bottom][i],bottom--更新上边界。

○ 左层:从下到上遍历,添加matrix[i][left],left++更新右边界。

○ 每轮遍历后检查边界是否交叉(如top>bottom或left>right),若交叉则结束循环。

4. 返回结果:最终res即为螺旋顺序元素序列。

四、代码与注释

class Solution {public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.empty()) return {};    // 空矩阵特判

        vector<int> res;                 // 结果数组
        int m = matrix.size(), n = matrix[0].size();   // 记录行列数
        int top = 0, bottom = m - 1, left = 0, right = n - 1;   // 初始化边界

        while (true) {
            // 从左到右遍历上层
            for (int i = left; i <= right; ++i) 
                res.push_back(matrix[top][i]);   // 添加元素,top上移
            if (++top > bottom) break;          // 上边界越界则终止

            // 从上到下遍历右层
            for (int i = top; i <= bottom; ++i)
                res.push_back(matrix[i][right]);   // 添加元素,right右移
            if (--right < left) break;           // 右边界越界终止

            // 从右到左遍历下层
            for (int i = right; i >= left; --i)
                res.push_back(matrix[bottom][i]);   // 添加元素,bottom下移
            if (--bottom < top) break;            // 下边界越界终止

            // 从下到上遍历左层
            for (int i = bottom; i >= top; --i)
                res.push_back(matrix[i][left]);   // 添加元素,left左移
            if (++left > right) break;           // 左边界越界终止
        }
        return res;
    }};

五、总结

1. 核心技巧:利用边界变量将复杂路径分解为四个方向的循环遍历,通过动态调整边界简化逻辑。

2. 时间复杂度:O(mn)(m行n列,每个元素被访问一次)。

3. 优化方向:可进一步思考坐标递推方法,但模拟法更直观易懂,适合新手理解。

4. 应用场景:类似“环形遍历”问题,需按特定路径访问多维数据时,边界控制是通用思路。

参考:力扣题解


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消