【Spiral Matrix II】cpp
题目:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
代码:
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > ret(n, vector<int>(n,0)); int circle = n/2; int v = 1; for ( int c=0; c<circle; ++c ) { // up for ( int col=c; col<n-c; ++col ) ret[c][col]=v++; // right for ( int row=c+1; row<n-c-1; ++row ) ret[row][n-1-c]=v++; // down for ( int col=n-1-c; col>=c; --col ) ret[n-1-c][col]=v++; // left for ( int row=n-2-c; row>c; --row) ret[row][c]=v++; } if ( n & 1 ) { ret[circle][circle]=v; } return ret; } };
tips:
按照Spiral Matrix的顺序走一遍元素,维护一个v每次运算后+1。
============================================
第二次过这道题,思路跟第一次一样。
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > ret(n, vector<int>(n,1)); if ( n<1 ) return ret; int val = 1; for ( int i=0; i<n/2; ++i ) { // north for ( int p=i; p<n-i; ++p ) ret[i][p] = val++; // east for ( int p=i+1; p<n-1-i; ++p ) ret[p][n-1-i] = val++; // south for ( int p=i; p<n-i; ++p ) ret[n-1-i][n-1-p] = val++; // west for ( int p=i+1; p<n-1-i; ++p ) ret[n-1-p][i] = val++; } if ( n & 1 ) ret[n/2][n/2] = val; return ret; } };
分类:
cpp刷Leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?