【leetcode59】螺旋矩阵

本文介绍了一个解决LeetCode 59题螺旋矩阵问题的C++实现方案。通过循环迭代的方式,按顺时针螺旋顺序填充一个n×n的矩阵。特别地,当n为奇数时,矩阵中心会单独填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【leetcode59】螺旋矩阵

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

输入:n = 1
输出:[[1]]

代码

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
	//将循环分成四个方向
	std::vector<std::vector<int> > twoDArray(n,std::vector<int>(n,0));
	//循环次数,n为奇数时单列
	int loop = n / 2;
	//起始位置
	int startX = 0;
	int startY = 0;
	//偏移量
	int offset = 1;
	//计数值count=[1,n^2]
	int count = 1;
	while (loop>0) {//条件loop>=0,loop
		//i表示一维坐标,j表示二维坐标
		int i = startX;
		int j = startY;
		//第一条边
		for (i; i < n - offset; ++i) {
			twoDArray[startX][i] = count++;
		}
		//第二条边
		//i = n - offset
		for (j; j < n - offset; ++j) {
			twoDArray[j][i] = count++;
		}
		//第三条边
		//j = n - offset
		for (i; i > startX; --i) {
			twoDArray[j][i] = count++;
		}
		//第四条边
		for (j; j > startX; --j) {
			twoDArray[j][i] = count++;
		}
		startX++;
		startY++;
		offset++;
		loop--;
	}
	if (n % 2 != 0) {
		twoDArray[n/2][n/2] = count++;
	}
	return twoDArray;
}


int main(){
unsigned int n = 5;
	std::vector<std::vector<int> > arr= generateMatrix(n);
	for (int i = 0; i < n;i++) {
		for (int j = 0; j < n;j++) {
			cout << arr[i][j] << ' ';
		}
		cout << endl;
	}

	return 0;
};
  • n = 5
    在这里插入图片描述
  • n = 6
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值