代码随想录-数组-螺旋矩阵II

今天练习:螺旋矩阵II

需要在注意4个for循环的条件及内容;

需要注意\t是制表位,记住\\\\\\\\

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

class Soluation {
public:
	vector<vector<int>> generateMatrix(int n) {
		vector<vector<int>> res(n, vector<int>(n, 0)); // 定义一个元素全为0的 n*n大小的二维数组。
		int startx = 0, starty = 0; // 每循环一个圈的位置
		int loop = n / 2; // 需要转的完整的圈数,比如3*3转1圈,5*5转两圈
		int mid = n / 2; //矩阵中间的位置
		int count = 1; // 给结果矩阵赋值
		int offset = 1; // 用于控制每一条边遍历的长度,
		int i,j;
		while (loop--)
		{
			i = startx;
			j = starty;

			for ( j = starty; j < n-offset; j++)
			{
				res[startx][j] = count++;
			}
			for ( i = startx; i < n-offset; i++)
			{
				res[i][j] = count++;
			}
			for ( j = n-offset; j >starty; j--)
			{
				res[i][j] = count++;
			}
			for ( i = n-offset; i >startx; i--)
			{
				res[i][j] = count++;
			}
			startx += 1;
			starty += 1;
			offset += 1;
		}

		// 如果n为奇数,需要单独给矩阵中间的的位置赋值
		if (n % 2) {
			res[mid][mid] = count;
		}
		return res;
	}

	
};

int main() {
	Soluation a;

	int n = 0;
	cout << "请输入数组长度n:" << endl;
	cin >> n;

	vector<vector<int>> ans;

	ans = a.generateMatrix(n);

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << ans[i][j] << "\t";
		}
		cout << endl;
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值