leetcode54. 螺旋矩阵(详解)
生活随笔
收集整理的這篇文章主要介紹了
leetcode54. 螺旋矩阵(详解)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:題目
二:上碼
class Solution { public:/**思路:1.1 2 3 45 6 7 89 10 11 1213 14 15 162.我們模擬順時針的順序,那么得分為4步 上面得一行 (1,2,3)左面得一行 (4,8,12)下面得一行 (16,15,14)右面得一行 (13,9,5)可以看到我們在取數(shù)字得時候,我們是每次只取出3個,也就是左閉右開那么這只是一圈,我們需要統(tǒng)計出圈數(shù),那么圈數(shù)和什么有關(guān)呢?圈數(shù) = min(行/2,列/2);3.模擬完圈數(shù)我們還應(yīng)該考慮一個問題,那就是我們應(yīng)該考慮中間的數(shù)1>:當行多列少的時候 列不能為偶數(shù) 否則就是完整的圈數(shù)2>:當列多 行少的時候 行不能為偶數(shù) 否則就是完整的圈數(shù)3>:當行==列的時候 中間就剩下一個數(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;//每圈的起點j = starty;//每圈的起點//最上面的一行 開始為 starty 表示的是我們的行不變 列在變//我們?nèi)〉氖亲箝]右開 那么我們邊界條件是 m - border(其中border隨著圈數(shù)的增加而增加)for ( ; j < m - border; j++) {ans.push_back(matrix[i][j]);}//最右面的一行 列不變 行在變 (這里的列 j 是拿上個for循環(huán)的)for ( ; i < n - border; i++) {ans.push_back(matrix[i][j]);}//最下面的一行 行不變列在變(這里的j 是第一個for循環(huán)的j i 是第二個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ù)不完整的情況//當行數(shù)比列數(shù)要多的時候 列數(shù)為奇數(shù)的話 那么圈數(shù)不完整//當行數(shù)比列數(shù)要少的時候 行數(shù)為奇數(shù)的話 那么圈數(shù)不完整//當行數(shù) == 列數(shù) 且都為奇數(shù)的話 那么只處理最中間的數(shù)即可//這里我們在處理的時候我們是處理的是 startx 和 starty 因為我們反正我們是 順時針模擬的//我們的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)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的leetcode54. 螺旋矩阵(详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3 天仍未修复,《暗黑破坏神 4》游戏玩
- 下一篇: 2023届春招实习拉钩一面凉经