LeetCode59.螺旋矩陣

LeetCode59.螺旋矩陣

  • 1.問題描述
  • 2.解題思路
  • 3.代碼

1.問題描述

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 20

2.解題思路

模擬順時針畫矩陣的過程:

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

我們要畫每四條邊,這四條邊怎么畫,每畫一條邊都要堅持一致的左閉右開,或者左開右閉的原則,這樣這一圈才能按照統一的規則畫下來。

3.代碼

python:

from typing import Listclass Solution:def generateMatrix(self, n: int) -> List[List[int]]:nums = [[0] * n for _ in range(n)]startx, starty = 0, 0  # 起始點loop, mid = n // 2, n // 2  # 迭代次數、n為奇數時,矩陣的中心點count = 1  # 計數for offset in range(1, loop + 1):  # 每循環一層偏移量加1,偏移量從1開始for i in range(starty, n - offset):  # 從左至右,左閉右開nums[startx][i] = countcount += 1for i in range(startx, n - offset):  # 從上至下nums[i][n - offset] = countcount += 1for i in range(n - offset, starty, -1):  # 從右至左nums[n - offset][i] = countcount += 1for i in range(n - offset, startx, -1):  # 從下至上nums[i][starty] = countcount += 1startx += 1  # 更新起始點starty += 1if n % 2 != 0:  # n為奇數時,填充中心點nums[mid][mid] = countreturn numssolution = Solution()
result = solution.generateMatrix(5)  # 傳入想要生成的矩陣的大小
for row in result:print(row)

C++:

#include <iostream>
#include <vector>using namespace std;class Solution {public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定義一個二維數組int startx = 0, starty = 0; // 定義每循環一個圈的起始位置int loop = n / 2; // 每個圈循環幾次,例如n為奇數3,那么loop = 1 只是循環一圈,矩陣中間的值需要單獨處理int mid = n / 2; // 矩陣中間的位置,例如:n為3, 中間的位置就是(1,1),n為5,中間位置為(2, 2)int count = 1; // 用來給矩陣中每一個空格賦值int offset = 1; // 需要控制每一條邊遍歷的長度,每次循環右邊界收縮一位int i,j;while (loop --) {i = startx;j = starty;// 下面開始的四個for就是模擬轉了一圈// 模擬填充上行從左到右(左閉右開)for (j = starty; j < n - offset; j++) {res[startx][j] = count++;}// 模擬填充右列從上到下(左閉右開)for (i = startx; i < n - offset; i++) {res[i][j] = count++;}// 模擬填充下行從右到左(左閉右開)for (; j > starty; j--) {res[i][j] = count++;}// 模擬填充左列從下到上(左閉右開)for (; i > startx; i--) {res[i][j] = count++;}// 第二圈開始的時候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一條邊遍歷的長度offset += 1;}// 如果n為奇數的話,需要單獨給矩陣最中間的位置賦值if (n % 2) {res[mid][mid] = count;}return res;}
};int main() {Solution s;int n;cout << "Enter the value of n: ";cin >> n;vector<vector<int>> matrix = s.generateMatrix(n);for (int i = 0; i < matrix.size(); i++) {cout << "[";for (int j = 0; j < matrix[i].size(); j++) {cout << matrix[i][j];if (j != matrix[i].size() - 1) {cout << ",";}}cout << "]";if (i != matrix.size() - 1) {cout << ",";}cout << endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160342.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160342.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces Round 822 (Div. 2)(D前綴和+貪心加血量)

A.選三條相鄰的邊遍歷一次求最小值 #include<bits/stdc.h> using namespace std; const int N 1e610,mod1e97; #define int long long int n,m; vector<int> g[N]; int a[N]; void solve() {cin>>n;int res2e18;for(int i1;i<n;i) cin>>a[i];sort…

談一談什么是接口測試?怎樣做接口測試?

掃盲內容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些類型&#xff1f; 3.接口的本質是什么&#xff1f; 4.什么是接口測試&#xff1f; 5.問什么要做接口測試&#xff1f; 6.怎樣做接口測試&#xff1f; 7.接口測測試點是什么&#xff1f; 8.接口測試都要掌…

童裝店鋪如何通過軟文增加客流量

在信息超負載、媒介粉塵化、產品同質化多重因素下&#xff0c;傳統營銷疲態盡顯、日漸式微&#xff0c;很難支撐新環境下品牌和企業的持續增長。聚焦童裝行業更是如此&#xff0c;一方面用戶迭代速度快&#xff0c;另一方面&#xff0c;新時代父母的育兒觀念更加精細化&#xf…

安裝pytorch

cuda≤11.6&#xff0c;觀察控制面板 觀察torch對應cuda版本 https://download.pytorch.org/whl/torch/ 安裝cuda11.6.0 CUDA Toolkit Archive | NVIDIA Developer cmd輸入nvcc -V 編輯國內鏡像源 .condarc anaconda prompt輸入 查看環境 conda env list 安裝py3.9…

MySQL面試,MySQL事務,MySQL鎖,MySQL集群,主從,MySQL分區,分表,InnoDB

文章目錄 數據庫-MySQLMySQL主從、集群模式簡單介紹1、主從模式 Replication2、集群模式3、主從模式部署注意事項 UNION 和 UNION ALL 區別分庫分表1.垂直拆分2、水平拆分 MySQL有哪些數據類型1、整數類型**&#xff0c;2、實數類型**&#xff0c;3、字符串類型**&#xff0c;4…

DDoS攻擊頻發,科普防御DDoS攻擊的幾大有效方法

談到目前最兇猛、頻率高&#xff0c;且令人深惡痛絕的網絡攻擊&#xff0c;DDoS攻擊無疑能在榜上占有一席之地。各種規模的企業報包括組織機構都可能受到影響&#xff0c;它能使企業宕機數小時以上&#xff0c;給整個互聯網造成無數損失。可以說&#xff0c;怎樣防御DDoS攻擊是…

python的多層嵌套循環時,break可以退出多層循環嗎?

在Python中&#xff0c;break 語句只能退出當前所在的循環&#xff0c;無法直接退出多層嵌套的循環。但是&#xff0c;你可以通過使用一個標志變量或者通過使用異常來模擬退出多層循環的效果。 使用標志變量&#xff1a; flag False for i in range(5):for j in range(5):if…

Vue 定義只讀數據 readonly

readonly 讓一個響應式數據變為 **深層次的只讀數據**。 isReadonly 判斷一個數據是不是只讀數據。 應用場景&#xff1a;不希望數據被修改時使用。 readonly 深層次只讀&#xff1a; <template><h1>reactive數據</h1><p>姓名&#xff1a;{{ info…

嵌入式系統中相關的高質量開源項目

關于GitHub&#xff0c;可能很多人誤以為這是互聯網人的專屬&#xff0c;其實并不是&#xff0c;那上面嵌入式相關的開源項目是有很多的。現分享一些高星開源項目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介紹了&#xff09;&#xff1a;Avem 項目鏈接&#xff1a; ht…

多功能神器,強勁升級,太極2.x你值得擁有!

嗨&#xff0c;大家好&#xff0c;今天給大家分享一個好用好玩的軟件。那就是太極2.x軟件&#xff0c;最近在1.0版本上進行了全新升級&#xff0c;升級后的功能更強更穩定&#xff0c;輕度用戶使用基本功能就已經足夠了&#xff0c;我們一起來看看吧&#xff01; 首頁 首頁左…

通過ESXi Shell修改ESXi服務器時區

ESXi Shell是ESXi服務器的命令行界面&#xff0c;用戶可以通過它來執行系統命令和管理操作。下面是通過ESXi Shell修改ESXi服務器時區的步驟&#xff1a; 1. 在ESXi服務器上開啟SSH服務&#xff0c;并使用SSH客戶端連接到ESXi服務器。 2. 輸入以下命令來查看當前時…

利用叉積計算向量的旋向及折線段的拐向

一、向量叉積 兩個向量 u u u、 v v v的叉積寫作 u v n ∥ u ∥ ∥ v ∥ s i n θ \mathbf{u \times v n \left \| u \right \| \left \| v \right \| sin\theta } uvn∥u∥∥v∥sinθ 式中&#xff0c; n n n: 與 u u u、 v v v均垂直的單位向量&#xff0c;theta是兩向量…

webpack的鉤子集合

總之有這么多鉤子可以用&#xff1a; entryOption&#xff1a;在entry配置項處理前被調用&#xff0c;可以修改entry配置項&#xff1b;beforeRun&#xff1a;在運行編譯器前被調用&#xff1b;run&#xff1a;在開始讀取記錄時被調用&#xff1b;emit&#xff1a;生成資源到ou…

Java 編碼

編碼: 加密: 通過加密算法和密鑰進行 也可通過碼表進行加密 對稱加密: 缺點:可被截獲 元數據---加密算法密鑰密文 ----> 解密算法密鑰元數據 算法:DES(短 56位),AES(長 128位)破解時間加長 非對稱加密: 元數據-加密算法加密密鑰 密文 --->加密算法解密密鑰元數據 …

mysql面試內容點

left join和inner join的區別 1.返回不同 innerjoin只返回兩個表中聯結字段相等的行。left join返回包括左表中的所有記錄和右表中聯結字段相等的記錄。 2.數量不同 inner join的數量小于等于左表和右表中的記錄數量。left join的數量以左表中的記錄數量相同。 3.記錄屬性不同…

C++學習——C++運算符重載(含義、格式、示例、遵循的規則)

以下內容源于C語言中文網的學習與整理&#xff0c;非原創&#xff0c;如有侵權請告知刪除。 一、運算符重載的含義 所謂重載&#xff0c;就是賦予新的含義。函數重載&#xff08;Function Overloading&#xff09;可以讓一個函數名有多種功能&#xff0c;在不同情況下進行不同…

Vue 重寫push和replace方法,解決:Avoided redundant navigation to current location

當我們使用編程式路由導航跳轉路徑時&#xff0c;如果我們兩次攜帶同樣的參數進行跳轉&#xff0c;會進行頁面報錯&#xff1a; 那產生這個問題的原因是什么呢&#xff1f; 我們接收并輸出調用push方法返回的結果&#xff1a; 會發現這是一個Promise對象 我們都知道&#xff…

SAP_ABAP_面試篇_關于Function Module函數的三種處理類型

關于 Function Module 這個技術點&#xff0c;在面試過程中一般會考察以下幾個問題&#xff1a; 1 函數處理類型的更新模式 一般會問到異步和事務&#xff08;邏輯單元 LUW&#xff09;&#xff0c;異步函數的調試方式、SM13監控更新函數的執行過程&#xff08;V1 與 V2 模式…

Epub書籍閱讀工具

Epub書籍閱讀工具 前言WIndows總結Neat ReaderAquile ReaderWPS Android總結Neat Reader掌閱 前言 Epub文件為電子書文件格式&#xff0c;此格式的電子書相比txt書籍&#xff0c;增加了目錄跳轉功能&#xff0c;并可以顯示圖片。本文介紹WIndows和Android端的epub書籍閱讀工具…

SpringBoot中的classpath都包含啥

一句話總結&#xff1a;classpath 等價于 main/java main/resources 第三方jar包的根目錄。下面詳細解釋。 參考&#xff1a;SpringBoot中的classpath