国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)

這篇具有很好參考價(jià)值的文章主要介紹了劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

作者:翟天保Steven
版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處

劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬),劍指offer,算法,c++

題目描述:

輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下4 X 4矩陣:

[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]

則依次打印出數(shù)字

[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]

數(shù)據(jù)范圍:

0 <= matrix.length <= 100

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

示例:

輸入:

[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

返回值:

[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]

解題思路:

本題考察算法場(chǎng)景模擬。兩種解題思路。

1)模擬邊界

? ? ? ?將矩陣看成多層包裹,先順時(shí)針遍歷最外面一層,再進(jìn)入里面一層繼續(xù)遍歷,直到上下左右邊界交錯(cuò)。

2)螺旋矩陣

? ? ? ?環(huán)帶為一層遍歷,邊界為一層遍歷。邊界遍歷又分為上下左右四個(gè)子部分。以“1+4”的組合遍歷,完成螺旋矩陣。

測(cè)試代碼:

1)模擬邊界

class Solution {
public:
    vector<int> printMatrix(vector<vector<int>> matrix) {
        vector<int> result;
        int size = int(matrix.size());
        // 處理矩陣為空的情況
        if(size == 0) 
            return result;
        // 左邊界
        int left = 0; 
        // 右邊界
        int right = matrix[0].size() - 1; 
        // 上邊界
        int up = 0; 
        // 下邊界
        int down = size - 1; 
        // 循環(huán)直到邊界交錯(cuò)
        while(left <= right && up <= down){ 
            // 上邊界從左到右
            for(int i = left; i <= right; i++) 
                result.push_back(matrix[up][i]); 
            // 上邊界向下一格,并判斷上下邊界位置是否交錯(cuò)
            up++; 
            if(up > down)
                break;
            // 右邊界從上到下
            for(int i = up; i <= down; i++) 
                result.push_back(matrix[i][right]);
            // 右邊界向左一格,并判斷左右邊界位置是否交錯(cuò)
            right--; 
            if(left > right)
                break;
            // 下邊界從右到左
            for(int i = right; i >= left; i--) 
                result.push_back(matrix[down][i]);
            // 下邊界向上一格,并判斷上下邊界位置是否交錯(cuò)
            down--; 
            if(up > down)
                break; 
            // 左邊界從下到上
            for(int i = down; i >= up; i--) 
                result.push_back(matrix[i][left]);
            // 左邊界向右一格,并判斷左右邊界位置是否交錯(cuò)
            left++; 
            if(left > right)
                break;
        }
        return result;
    }
};

2)螺旋矩陣文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-689464.html

class Solution {
public:
    vector<int> printMatrix(vector<vector<int>> matrix) {       
        int row = int(matrix.size());
        int col = int(matrix[0].size());
        // 處理矩陣為空的情況
        if(row == 0 || col == 0) 
            return vector<int>(0);
        // 確認(rèn)環(huán)數(shù),環(huán)數(shù)與行列的最小值有關(guān)
        int minL = min(row, col);
        int ring = minL / 2 + minL % 2;
        // 螺旋矩陣遍歷
        int count = row * col;
        int t = 0;
        vector<int> result(count);
        for(int k = 0; k < ring; ++k){
            // 當(dāng)前環(huán)上邊界遍歷
            for(int p = k; p < col - k && t < count; ++p){
                result[t++] = matrix[k][p];
            }
            // 當(dāng)前環(huán)右邊界遍歷
             for(int p = k + 1; p < row - k - 1 && t < count; ++p){
                result[t++] = matrix[p][col - k - 1];
            }
            // 當(dāng)前環(huán)下邊界遍歷
             for(int p = col - k - 1; p >= k && t < count; --p){
                result[t++] = matrix[row - k - 1][p];
            }
            // 當(dāng)前環(huán)左邊界遍歷
             for(int p = row - k - 2; p >= k + 1 && t < count; --p){
                result[t++] = matrix[p][k];
            }
        }
        return result;
    }
};

到了這里,關(guān)于劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【LeetCode-簡(jiǎn)單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解)

    【LeetCode-簡(jiǎn)單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解)

    輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 示例 1: 示例 2: 劍指 Offer 29. 順時(shí)針打印矩陣 - 力扣(LeetCode) 與 力扣54題相同 54.?螺旋矩陣 二維數(shù)組順時(shí)針從外往里走 可以想象成:按照 右-》下-》左 -》上 的順序一直走,走過(guò)的地方不要走即可。

    2024年02月09日
    瀏覽(27)
  • Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 示例 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 1.題目要求

    2024年02月13日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) jz29 順時(shí)針打印矩陣

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) jz29 順時(shí)針打印矩陣

    :模擬 簡(jiǎn)單題做了超過(guò)40分鐘 調(diào)了很久 不好? 我自己做的。 xy_t: 記錄xy的方向,往右走,往下走,往左走,往上走 t控制方向 isx: ????????true:輪到x方向動(dòng) ? ? ? ? false:輪到y(tǒng)方向動(dòng) n_res m_res: ? ? ? ? n_res:還沒(méi)走過(guò)的行數(shù)(x方向) ????????m_res:還沒(méi)走

    2024年01月17日
    瀏覽(19)
  • 劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

    劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù),用來(lái)判斷在一個(gè)n乘m的矩陣中是否存在一條包含某長(zhǎng)度為len的字符串所有字符的路徑。路徑可以從矩陣中的任意一個(gè)格子開(kāi)始,每一步可以

    2024年02月11日
    瀏覽(23)
  • 劍指29.順時(shí)針打印矩陣 31 棧的壓入,彈出序列 03 數(shù)組中的重復(fù)數(shù)字 53缺失的數(shù)字 04二維數(shù)組中的查找

    劍指29.順時(shí)針打印矩陣 31 棧的壓入,彈出序列 03 數(shù)組中的重復(fù)數(shù)字 53缺失的數(shù)字 04二維數(shù)組中的查找

    回字形 思路:pushed數(shù)組里遍歷進(jìn)棧,遍歷時(shí)候,先進(jìn)棧,再判斷棧頂是否和poped序列的當(dāng)前指向的是否一樣,一樣就pop,直到不一樣為止,然后繼續(xù)遍歷進(jìn)棧。然后再判斷棧里面剩余的和poped序列指向的一不一樣,一樣,就把棧里面的pop,直到棧為空,只要有一個(gè)不一樣,就

    2024年02月16日
    瀏覽(26)
  • 劍指offer--JZ6 從尾到頭打印鏈表

    劍指offer--JZ6 從尾到頭打印鏈表

    我寫(xiě)不出來(lái),參考別人的代碼后理清思路后再寫(xiě)的C語(yǔ)言版本,代碼如下: 最難理解的是創(chuàng)建結(jié)果數(shù)組那里。我竟然不知道有這種語(yǔ)法。我看了老半天。malloc動(dòng)態(tài)申請(qǐng)的內(nèi)存可以看作數(shù)組使用,而且能使用數(shù)組的方式來(lái)訪問(wèn)元素。 大致講解下整體思路: 1.創(chuàng)建一個(gè)頭結(jié)點(diǎn)hea

    2024年02月11日
    瀏覽(25)
  • 【算法 | 模擬No.4】AcWing 756. 蛇形矩陣 & AcWing 40. 順時(shí)針打印矩陣

    【算法 | 模擬No.4】AcWing 756. 蛇形矩陣 & AcWing 40. 順時(shí)針打印矩陣

    個(gè)人主頁(yè):兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【AcWing算法提高學(xué)習(xí)專欄】 ??本專欄旨在提高自己算法能力的同時(shí),記錄一下自己的學(xué)習(xí)過(guò)程,希望對(duì)大家有所幫助 ??希望我們一起努力、成

    2024年01月16日
    瀏覽(30)
  • 劍指offer(C++)-JZ49:丑數(shù)(算法-其他)

    劍指offer(C++)-JZ49:丑數(shù)(算法-其他)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 把只包含質(zhì)因子2、3和5的數(shù)稱作丑數(shù)(Ugly Number)。例如6、8都是丑數(shù),但14不是,因?yàn)樗|(zhì)因子7。 習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。求按從小到大的順

    2024年02月03日
    瀏覽(28)
  • 劍指offer(C++)-JZ47:禮物的最大價(jià)值(算法-動(dòng)態(tài)規(guī)劃)

    劍指offer(C++)-JZ47:禮物的最大價(jià)值(算法-動(dòng)態(tài)規(guī)劃)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 在一個(gè)mtimes nm×n的棋盤(pán)的每一格都放有一個(gè)禮物,每個(gè)禮物都有一定的價(jià)值(價(jià)值大于 0)。你可以從棋盤(pán)的左上角開(kāi)始拿格子里的禮物,并每次向右或者向

    2024年02月05日
    瀏覽(26)
  • 劍指offer(C++)-JZ13:機(jī)器人的運(yùn)動(dòng)范圍(算法-回溯)

    劍指offer(C++)-JZ13:機(jī)器人的運(yùn)動(dòng)范圍(算法-回溯)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 地上有一個(gè) rows 行和 cols 列的方格。坐標(biāo)從 [0,0] 到 [rows-1,cols-1] 。一個(gè)機(jī)器人從坐標(biāo) [0,0] 的格子開(kāi)始移動(dòng),每一次只能向左,右,上,下四個(gè)方向移動(dòng)一格,

    2024年02月12日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包