【Spiral Matrix II】cpp
2024-08-29 10:47:12
题目:
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,));
int circle = n/;
int v = ;
for ( int c=; c<circle; ++c )
{
// up
for ( int col=c; col<n-c; ++col ) ret[c][col]=v++;
// right
for ( int row=c+; row<n-c-; ++row ) ret[row][n--c]=v++;
// down
for ( int col=n--c; col>=c; --col ) ret[n--c][col]=v++;
// left
for ( int row=n--c; row>c; --row) ret[row][c]=v++;
}
if ( n & )
{
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,));
if ( n< ) return ret;
int val = ;
for ( int i=; i<n/; ++i )
{
// north
for ( int p=i; p<n-i; ++p ) ret[i][p] = val++;
// east
for ( int p=i+; p<n--i; ++p ) ret[p][n--i] = val++;
// south
for ( int p=i; p<n-i; ++p ) ret[n--i][n--p] = val++;
// west
for ( int p=i+; p<n--i; ++p ) ret[n--p][i] = val++;
}
if ( n & ) ret[n/][n/] = val;
return ret;
}
};
最新文章
- github拉取和推送
- app:clean classes Exception
- 2016.10.30 NOIP模拟赛 day2 PM 整理
- 修改Linux默认启动级别或模式的方法
- JS在路径中传中文参数
- 创建JOB
- CI 框架去掉url 中index.php的方法
- 学习总结 for循环--冒泡排序
- 使用XCopy发布网页
- 浅谈Oracle函数返回Table集合
- pat 1055 区间前k个
- Strategy 模式
- Python学习笔记(五)Python的切片和迭代
- 用javascript把扑克牌理理顺!
- html代替submit按钮的图片代码
- MySQL插入数据时插入无效的列
- 工控随笔_13_西门子_WinCC的VBS脚本_04_变量类型之二
- redis读书笔记
- poj3696 欧拉函数引用
- Unreal Engine 4 Based Materials
热门文章
- Altium_Designer17-PCB-如何重新定义板子外形
- I2C总线协议学习笔记 (转载)
- 问题 D: C++ 习题 输出日期时间--友元函数
- 2018.7.15 解决css中input输入框点击时去掉外边框方法
- maven没有servlet(创建servlet后报错)
- CUDA三维数组
- js实现弹窗一个ip在24小时只弹出一次的代码
- jq weui 图片浏览器Photo Browser 第一次点击任意图片总是显示第一张
- C++使用GDI+实现图片格式转换
- 【思维题 细节】loj#6042. 「雅礼集训 2017 Day7」跳蚤王国的宰相