Spiral Matrix II

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;
}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值