将1到n*n顺时针赋值到n*n的矩阵中

螺旋矩阵

给定一个正整数 n,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

思路:模拟顺时针画矩阵的过程,1.从左到右;2.从上到下;3.从右往左;4.从下往上,每次都在前闭后开区间[a,b),从(0,0)开始每一圈都以矩阵的左上角为起点画圆,一圈结束后,起点的x,y加1继续画圆,如果n为偶数,则需要画n/2个圆;如果n为奇数,则画n/2个原后,将矩阵中心的值(n/2,n/2)赋值为n*n;

vector<vector<int>> generateMaxtix(int n){
	vector<vector<int>> result(n,vector<int>(n,0));
	int startX = 0;			//起始点的X坐标
	int startY = 0;			//起始点的Y坐标
	int loop = n/2;			//循环的圈数
	int item = 1;			//矩阵赋值的初始值
	while(loop--){
		int endX = n - startX - 1;	//每次画圈的截至行号
		int endY = n - startY - 1;	//每次画圈的截至列号
		//从左到右
		for(int j = startY; j < endY; ++j)
			result[startX][j] = item++;
		//从上到下
		for(int i = startX; i < endX; ++i)
			result[i][endY] = item++;
		//从右到左
		for(int j = endY; j > startY; --j)
			result[endX][j] = item++;
		//从下到上
		for(int i = endX; i > startX; --i)
			result[i][startY] = item++;
		++startX;
		++startY;
	}
	if(n&1)		//n为奇数的时候矩阵中心点赋值
		result[n/2][n/2] = item;
	return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值