数组-旋转矩阵II-中等

描述
给你一个数n生成一个包含1-n^2的螺旋形矩阵
您在真实的面试中是否遇到过这个题?  是
样例
n = 3
矩阵为
[
  [ 1, 2, 3 ],
  [ 8, 9, 4 ],
  [ 7, 6, 5 ]

]


题目链接

分析

        该题目和旋转矩阵的思路差不多,只不过需要初始化矩阵,然后对每个位置进行存储,对每个位置+1,所以计算位置的数需要设置为全局变量。

程序


class Solution {
public:
	/**
	* @param n: An integer
	* @return: a square matrix
	*/
	int counts = 1;
	vector<vector<int>> generateMatrix(int n) {
		// write your code here
		vector<vector<int> > results(n, vector<int>(n, 0));
		if (n == 0)
			return results;
		int left_x, left_y, right_x, right_y;
		left_x = left_y = 0;
		right_x = right_y = n - 1;
		while (left_x <= right_x && left_y <= right_y){
			generateMatrix(results, left_x++, left_y++, right_x--, right_y--);
		}
		return results;
	}
	void generateMatrix(vector<vector<int>> &results, int left_x, int left_y, int right_x, int right_y){
		if (left_x == right_x){//在中心部分,赋值之后即可返回子函数
			results[left_x][left_y] = counts;
			return;
		}
		int cur_x = left_x;
		int cur_y = left_y;
		while (cur_x != right_x){
			results[left_y][cur_x] = counts;
			counts++;
			cur_x++;
		}
		while (cur_y != right_y){
			results[cur_y][right_x] = counts;
			counts++;
			cur_y++;
		}
		while (cur_x != left_x){
			results[right_y][cur_x] = counts;
			counts++;
			cur_x--;
		}
		while (cur_y != left_y){
			results[cur_y][left_x] = counts;
			counts++;
			cur_y--;
		}
	}
};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值