Spiral Matrix II

本文介绍了一种生成螺旋矩阵的方法,给定整数 n,按螺旋顺序填充元素从1到 n² 的 n×n 矩阵。算法通过定义矩形边界并逐步缩小边界范围来实现矩阵填充。

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 ]
]

解题思路:确定矩形边框,通过数字递增顺序填写,进而改变矩形边框的大小。最后通过判定边框的大小关系结束遍历.

#include<iostream>
#include<vector>
using namespace std;

vector<vector<int> > generateMatrix(int n) {
	vector<int>ResultRow(n, 0);
	vector<vector<int> >ResultData(n, ResultRow);

	int rectangleLeft  = 0;
	int rectangleRight = n - 1;
	int rectangleAbove = 0;
	int rectangleDown  = n - 1;
	int data_count = 0;
	while (true)
	{
		//上边界
		for (int i = rectangleLeft; i <= rectangleRight;++i)
			ResultData[rectangleAbove][i] = ++data_count;
		if (++rectangleAbove > rectangleDown)
			break;
		//右边界
		for (int i = rectangleAbove; i <= rectangleDown; ++i)
			ResultData[i][rectangleRight] = ++data_count;
		if (--rectangleRight < rectangleLeft)
			break;
		//下边界
		for (int i = rectangleRight; i >= rectangleLeft; --i)
			ResultData[rectangleDown][i] = ++data_count;
		if (--rectangleDown < rectangleAbove)
			break;
		//左边界
		for (int i = rectangleDown; i >= rectangleAbove; --i)
			ResultData[i][rectangleLeft] = ++data_count;
		if (++rectangleLeft > rectangleRight)
			break;
	}
	return ResultData;
}


 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值