日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

leetcode54. 螺旋矩阵(详解)

發(fā)布時(shí)間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode54. 螺旋矩阵(详解) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:題目

二:上碼

class Solution { public:/**思路:1.1 2 3 45 6 7 89 10 11 1213 14 15 162.我們模擬順時(shí)針的順序,那么得分為4步 上面得一行 (1,2,3)左面得一行 (4,8,12)下面得一行 (16,15,14)右面得一行 (13,9,5)可以看到我們?cè)谌?shù)字得時(shí)候,我們是每次只取出3個(gè),也就是左閉右開那么這只是一圈,我們需要統(tǒng)計(jì)出圈數(shù),那么圈數(shù)和什么有關(guān)呢?圈數(shù) = min(行/2,列/2);3.模擬完圈數(shù)我們還應(yīng)該考慮一個(gè)問(wèn)題,那就是我們應(yīng)該考慮中間的數(shù)1>:當(dāng)行多列少的時(shí)候 列不能為偶數(shù) 否則就是完整的圈數(shù)2>:當(dāng)列多 行少的時(shí)候 行不能為偶數(shù) 否則就是完整的圈數(shù)3>:當(dāng)行==列的時(shí)候 中間就剩下一個(gè)數(shù).*/vector<int> spiralOrder(vector<vector<int>>& matrix) {int n = matrix.size();//行數(shù)int m = matrix[0].size();//列數(shù)int loop = min(m/2,n/2);//圈數(shù)int border = 1;//邊界int startx = 0,starty = 0;int i,j;vector<int> ans;while(loop--) {i = startx;//每圈的起點(diǎn)j = starty;//每圈的起點(diǎn)//最上面的一行 開始為 starty 表示的是我們的行不變 列在變//我們?nèi)〉氖亲箝]右開 那么我們邊界條件是 m - border(其中border隨著圈數(shù)的增加而增加)for ( ; j < m - border; j++) {ans.push_back(matrix[i][j]);}//最右面的一行 列不變 行在變 (這里的列 j 是拿上個(gè)for循環(huán)的)for ( ; i < n - border; i++) {ans.push_back(matrix[i][j]);}//最下面的一行 行不變列在變(這里的j 是第一個(gè)for循環(huán)的j i 是第二個(gè)for循環(huán)中的 i)for ( ; j > starty; j--) {ans.push_back(matrix[i][j]);}//最右面的一行 列不變 行在變 (這里的 i 和 j 都是上面for循環(huán)的)for ( ; i > startx; i--) {ans.push_back(matrix[i][j]);}startx++;starty++;border++;//邊界不一樣了 }//處理行數(shù) 列數(shù) 中存在奇數(shù)的情況 就是導(dǎo)致我們的去圈數(shù)不完整的情況//當(dāng)行數(shù)比列數(shù)要多的時(shí)候 列數(shù)為奇數(shù)的話 那么圈數(shù)不完整//當(dāng)行數(shù)比列數(shù)要少的時(shí)候 行數(shù)為奇數(shù)的話 那么圈數(shù)不完整//當(dāng)行數(shù) == 列數(shù) 且都為奇數(shù)的話 那么只處理最中間的數(shù)即可//這里我們?cè)谔幚淼臅r(shí)候我們是處理的是 startx 和 starty 因?yàn)槲覀兎凑覀兪?順時(shí)針模擬的//我們的startx 和 starty是一直變化的, 我們的邊界的話 是需要左閉右閉的 所以我們 // 減去 border后就又加一了.if (n > m && m % 2 != 0) {//剩下豎著的一列 列不變行在變for ( ; startx < n - border +1; startx++) ans.push_back(matrix[startx][starty]);} else if (n < m && n % 2 != 0) { //剩下橫著的一行 行不變列在變for ( ; starty < m - border+1; starty++) ans.push_back(matrix[startx][starty]);} else if (m == n && m % 2 != 0) {//int mid = m/2;ans.push_back(matrix[mid][mid]);}return ans;} };

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的leetcode54. 螺旋矩阵(详解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。