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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

59. 螺旋矩阵 II(模拟)

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 59. 螺旋矩阵 II(模拟) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

示例 1:

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

示例 2:
輸入:n = 1
輸出:[[1]]

提示:

1 <= n <= 20

這個題目是一道典型的模擬題目,不涉及什么算法,考察的就是對代碼的使用靈活度;

其實一看就應該想到添加數其實就是分為幾個循環來做,
填充上行從左到右
填充右列從上到下
填充下行從右到左
填充左列從下到上
難點也就是在這里,該如何規定循環長度?

這里面一定要注意的是循環區間規定的統一性,不能這個是左閉右開,那個就成了左開右閉,這樣會出現很多問題,
這里我們遵循左閉右開的原則,那么就拿示例一來說,遍歷順序就是:
1 到 2
3 到 4
5 到 6
7 到 8
這就完成了一圈的循環,

這就是這道題你所規定的標準,這樣做才不會亂

代碼有詳細注釋,可以結合來看
代碼如下:

class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans(n, vector<int>(n, 0));//每一圈循環的起始位置int startRow = 0, startCol = 0;//矩陣中間位置,如果n為奇數,則最后中間位置循環走不到,需要單獨添加int mid = n / 2;//給矩陣每個空格賦值int count = 1;//循環圈數int loops = n / 2;//用來控制每一圈的每一條邊的循環的長度int offest = 1;while (loops--) {int i = startRow, j = startCol;//先從左到右循環,左閉右開for (j = startCol; j < startCol + n - offest; ++j) {ans[startRow][j] = count++;}//從上到下循環,上閉下開for (i = startRow; i < startRow + n - offest; ++i) {ans[i][j] = count++;}//從右到左循環,右閉左開for (; j > startCol; --j) {ans[i][j] = count++;}//從下向上循環,下閉上開for (; i > startRow; --i) {ans[i][j] = count++;}//下一圈循環開始時起始位置各加一startRow++;startCol++;//因為起始位置加一,且下一圈循環長度會減少一,//所以得先減去起始加的一再減減少的一,所以要加二offest += 2;}//n為奇數需要給中間位置單獨賦值,及最后一個值if (n % 2) ans[mid][mid] = count;return ans;} }; 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的59. 螺旋矩阵 II(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。