leetcode59:螺旋矩阵||(思路+详解)
生活随笔
收集整理的這篇文章主要介紹了
leetcode59:螺旋矩阵||(思路+详解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
二:思路
1.我們需要模擬數字的變化過程,
2.模擬填充的過程:(順時針)
填充上行 從左到右
填充右行 從上到下
填充下行 從右向左
填充左行 從下到上
3.分析我們填充數字的過程,比如n=3的時候
上行:1,2
右行:3,4
下行:5,6
左行:7,8
這么分析下來我們每次填充的規律也就是 左開右閉
三:上碼
class Solution { public:/***思路:1.我們需要模擬數字的變化過程,2.模擬填充的過程:(順時針)填充上行 從左到右填充右行 從上到下填充下行 從右向左填充左行 從下到上3.分析我們填充數字的過程,比如n=3的時候上行:1,2右行:3,4下行:5,6左行:7,8這么分析下來我們每次填充的規律也就是 左開右閉 **/vector<vector<int>> generateMatrix(int n) {vector<vector<int> >ans(n,vector<int>(n,0));//用vector定義一個二維數組int loop = n/2;//這個求出模擬幾圈,比如 n = 3 那就模擬一圈,n= 4那就需要模擬兩圈int mid = n/2;//當n=3為奇數的時候,我們可以知道最中間的一個值下標(1,1)int border = 1;//這個是為了控制我們每次遍歷的時候長度int count = 1;//第一值的大小int startx = 0,starty = 0;//記錄每一圈的開始位置int i,j;while(loop--){i = startx;j = starty;//四個for循環模擬轉一圈//模擬上行從左到右(左開右閉)for(j = starty; j < starty+n-border; j++){//starty+n-border:這里 可以拿n=4時來理解ans[startx][j] = count++;//這里是行不變 列變}//模擬右行 從上到下(左開右閉)for(i = startx; i < startx+n-border; i++){ans[i][j] = count++;//這里是行變 列不變 列為第一個for循環中的j}//模擬下行 從右向左(左開右閉)(這里的左開右閉是相對于for循環來說的)for(;j > starty; j--) {ans[i][j] = count++;//這里行不變 列在變(行取的是第二個for循環的i}//模擬左行 從下到上(左開右閉)for(;i > startx; i--){ans[i][j] = count++;//這里是行在變 列不變 (列取的是第三個for循環中的i)}startx++;//如果有兩圈的話那么起始位置就變了,拿n=4舉例,第一圈起始位置(0,0),第二圈的起始位置為(1,1)starty++;border+=2;//當到第二圈的時候,我們的邊界為3,也就是一行的第一個位置不可取,倒數第一個倒數第二個位置不可取}if(n%2 != 0){ans[mid][mid] = count;} return ans;} };渣渣杰又水了一道 這個模擬的過程有意思 對數組玩的真溜
總結
以上是生活随笔為你收集整理的leetcode59:螺旋矩阵||(思路+详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 减肥不掉秤的原因是什么
- 下一篇: leetcode54:螺旋矩阵