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

【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54

這篇具有很好參考價(jià)值的文章主要介紹了【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

歡迎來到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)砺菪仃嚨姆窒?/strong>?


59. 螺旋矩陣 II

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

示例 1:
【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法

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

示例 2:

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

提示:

1 <= n <= 20

思路:

本類型題目其實(shí)都不涉及什么算法,就是模擬螺旋順序打印的過程,下面我們來模擬一下

  • 填充上行從左到右
  • 填充右列從上到下
  • 填充下行從右到左
  • 填充左列從下到上

但是我們可以看出,這樣一圈一圈的模擬下去,邊界條件非常多,很容易出錯(cuò),這時(shí)候我們第一節(jié)學(xué)的二分法中用的循環(huán)不變量規(guī)則就非常重要了

矩陣的四條邊要么一致遵循左閉右開,要么左開右閉
【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法
【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法

class Solution {
public:
    vector<vector<int>> generateMatrix(int n)
    {
        vector<vector<int>> res(n,vector<int>(n,0));
        int startx=0,starty=0;  //定義每循環(huán)一個(gè)圈的起始位置
        int loop=n/2; //每個(gè)圈循環(huán)幾次,如果n為奇數(shù)3,那么loop=1,只循環(huán)一圈
        int mid=n/2;  //矩陣中間位置,例如n為3,中間的位置為【1,1】
        int count=1;  //用來給矩陣元素賦值的
        int offset=1; //用來控制循環(huán)遍歷長(zhǎng)度
        int i,j;
        while(loop--)
        {
            i=startx,j=starty;
            //左閉右開
            for(j=starty;j<starty+n-offset;j++) res[startx][j]=count++;
            for(i=startx;i<startx+n-offset;i++) res[i][j]=count++;
            for(;j>starty;j--) res[i][j]=count++;
            for(;i>startx;i--) res[i][j]=count++;
            //第二圈開始,起始位置要各自加一
            startx++,starty++;
            offset+=2;
        }
        //如果n為奇數(shù),則需要單獨(dú)給矩陣之間的位置賦值
        if(n%2) res[mid][mid]=count;
        return res;
    }
   
};

上面代碼中已經(jīng)把模擬過程詳細(xì)講解了一遍,這里再對(duì)以下兩點(diǎn)特別說明一下:

  • starty+n-offset:為什么這里要加上起始位置,因?yàn)榈诙﹂_始起始坐標(biāo)不為0
  • offset+=2:為什么要加2,因?yàn)槊孔咭蝗蜕倭藘啥说脑?,賦初值為1是因?yàn)樽裱箝]右開的原則
  • 上邊有3 * 3和4 * 4的模擬圖

54. 螺旋矩陣

給你一個(gè) m 行 n 列的矩陣 matrix ,請(qǐng)按照 順時(shí)針螺旋順序 ,返回矩陣中的所有元素。

示例 1:

【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法

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

示例 2:

【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法

輸入: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]

提示:

m ==matrix[i].length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

做這道題目我們也是在遵循循環(huán)不變量規(guī)則,看下面的代碼中我們用的前置++,而不是后置++,細(xì)品(左開右閉),這里判斷循環(huán)結(jié)束的方法也非常巧妙,判斷4個(gè)邊界是否有沖突,有沖突就退出循環(huán)

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) 
    {
        
        vector<int> ans;
        if(!matrix.size()) return ans;
        int up=0,down=matrix.size()-1,left=0,right=matrix[0].size()-1;
        while(true)
        {
            for(int i=left;i<=right;++i) ans.push_back(matrix[up][i]);
            if(++up>down) break;
            for(int j=up;j<=down;++j) ans.push_back(matrix[j][right]);
            if(--right<left) break;
            for(int k=right;k>=left;--k) ans.push_back(matrix[down][k]);
            if(--down<up) break;
            for(int L=down;L>=up;--L) ans.push_back(matrix[L][left]);
            if(++left>right) break;
        }
        return ans;
    }
};

【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54,# Leetcode | 代碼隨想錄 | 專題化,leetcode,矩陣,算法

總結(jié)

?做這種類型的題目就是要多畫圖模擬,思路清晰就好辦了,還有就是注意邊界條件(遵循循環(huán)不變量規(guī)則)文章來源地址http://www.zghlxwxcb.cn/news/detail-568503.html

到了這里,關(guān)于【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 代碼隨想錄第二天|977.有序數(shù)組的平方 209.長(zhǎng)度最小的子數(shù)組 59.螺旋矩陣

    代碼隨想錄第二天|977.有序數(shù)組的平方 209.長(zhǎng)度最小的子數(shù)組 59.螺旋矩陣

    第二天開始了, 一開始自己寫,就只想到了先一個(gè)個(gè)平方,再排序(甚至打算手寫排序循環(huán),后來才發(fā)現(xiàn)c++有自帶的排序函數(shù)sort(a.begin(),a.end()),c++真好,加油努力學(xué)習(xí)c++。 第二種方法然后看提示用雙指針也完全沒想出來,只能看文章了,淚 寫完發(fā)現(xiàn)代碼亂七八糟,要改。

    2024年02月13日
    瀏覽(26)
  • 代碼隨想錄Day02:977.有序數(shù)組的平方 ,209.長(zhǎng)度最小的子數(shù)組 ,59.螺旋矩陣II

    977.有序數(shù)組的平方 【 題目建議 】: 本題關(guān)鍵在于理解雙指針?biāo)枷?【隨想錄文章講解】 【卡哥視頻講解】 方法一:暴力排序法 **思路:**先對(duì)數(shù)組中每個(gè)數(shù)進(jìn)行平方運(yùn)算,然后再排序 時(shí)間復(fù)雜度是 O(n + nlogn) 其中包括計(jì)算平方數(shù)組的O(n)和快速排序的O(nlogn),總體上是O(nlo

    2023年04月27日
    瀏覽(26)
  • 代碼隨想錄 LeetCode數(shù)組篇 二分查找

    代碼隨想錄 LeetCode數(shù)組篇 二分查找

    # (簡(jiǎn)單)704. 二分查找 題目鏈接 代碼隨想錄 - 二分查找思路 二分查找,思路很簡(jiǎn)單,但是在while循環(huán)left和right的比較是寫=還是,還有right=mid還是right=mid-1容易混淆 需要想清楚對(duì)區(qū)間的定義,是[left,right],還是[left,right) (版本一,左閉右閉版本) (版本二,左閉右開) 題目

    2024年02月02日
    瀏覽(93)
  • 代碼隨想錄Day1 | 數(shù)組01- leetcode 704、27

    題目鏈接:二分查找 關(guān)鍵問題: ????????- 邊界(left、right)、當(dāng)前查找值(middle) ? ? ? ? ? ? ? ? - target大于當(dāng)前查找值 -- 當(dāng)前查找區(qū)域的右邊,更改區(qū)間left ? ? ? ? ? ? ? ? - target小于當(dāng)前查找值 -- 當(dāng)前查找區(qū)域的左邊,更改區(qū)間right ? ? ? ? ? ? ? ? - middle的計(jì)

    2024年02月16日
    瀏覽(88)
  • 【代碼隨想錄-Leetcode第六題:209. 長(zhǎng)度最小的子數(shù)組】

    【代碼隨想錄-Leetcode第六題:209. 長(zhǎng)度最小的子數(shù)組】

    給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) target 。 找出該數(shù)組中滿足其和 ≥ target 的長(zhǎng)度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其長(zhǎng)度。如果不存在符合條件的子數(shù)組,返回 0 。 參考【代碼隨想錄】 示例 1: 示例 3: 提示: 1 = target = 109 1 = nums.length

    2024年02月12日
    瀏覽(26)
  • 代碼隨想錄第四天 兩兩交換鏈表中的節(jié)點(diǎn)

    題目:24. 兩兩交換鏈表中的節(jié)點(diǎn) 給你一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后鏈表的頭節(jié)點(diǎn)。你必須在不修改節(jié)點(diǎn)內(nèi)部的值的情況下完成本題(即,只能進(jìn)行節(jié)點(diǎn)交換)。 樣例: 非遞歸實(shí)現(xiàn) 思路:1.先排除空節(jié)點(diǎn)和單個(gè)節(jié)點(diǎn);2對(duì)于兩個(gè)節(jié)點(diǎn)需要交換他們的順序

    2024年04月16日
    瀏覽(47)
  • 代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn) 題目鏈接:24. 兩兩交換鏈表中的節(jié)點(diǎn) - 力扣(LeetCode) 思路: 先定義一個(gè)虛擬頭結(jié)點(diǎn)方便操作。 再就是交換相鄰兩個(gè)元素了, 此時(shí)一定要畫圖,不畫圖,操作多個(gè)指針很容易亂,而且要操作的先后順序 初始時(shí),cur指向虛擬頭結(jié)點(diǎn),然后進(jìn)行

    2024年02月09日
    瀏覽(24)
  • [自我記錄]隨想錄刷題第二天 | 977.有序數(shù)組的平方,209.長(zhǎng)度最小的子數(shù)組,59.螺旋矩陣II

    ?代碼隨想錄打卡第二天, 新手自我記錄一下刷題歷程, 僅為自我打卡使用. 今天刷了三道主題, 第一道雙指針和第三道模擬做出來了, 第二道寫出了暴力解法但是提交leetcode超時(shí)了, 測(cè)試用例過了18/20, 看了carl哥答案以后自己重新補(bǔ)寫了滑動(dòng)窗口方法. 977. 有序數(shù)組的平方 簡(jiǎn)單題

    2024年02月05日
    瀏覽(24)
  • 代碼隨想錄第6天| 哈希表理論基礎(chǔ) ,LeetCode242.有效的字母異位詞,LeetCode349. 兩個(gè)數(shù)組的交集,LeetCode202. 快樂數(shù),LeetCode1. 兩數(shù)之和

    代碼隨想錄第6天| 哈希表理論基礎(chǔ) ,LeetCode242.有效的字母異位詞,LeetCode349. 兩個(gè)數(shù)組的交集,LeetCode202. 快樂數(shù),LeetCode1. 兩數(shù)之和

    哈希表(散列表)理論基礎(chǔ) : 哈希表是根據(jù)關(guān)鍵碼的值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。 直白來講其實(shí)數(shù)組就是一張哈希表。 ? 什么時(shí)候想到用哈希法, 當(dāng)我們遇到了要快速判斷一個(gè)元素是否出現(xiàn)集合里的時(shí)候,就要考慮哈希法 。 當(dāng)我們遇到了要快速判斷一個(gè)元素是否出現(xiàn)集

    2024年02月10日
    瀏覽(90)
  • 代碼隨想錄Leetcode70. 爬樓梯

    代碼隨想錄Leetcode70. 爬樓梯

    ? ? ? ? 空間復(fù)雜度為O(N),如果想要優(yōu)化空間復(fù)雜度,則只用三個(gè)變量進(jìn)行狀態(tài)轉(zhuǎn)移也可以,參考 代碼隨想錄 Leetcode509. 斐波那契數(shù)-CSDN博客

    2024年02月19日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包