数组-旋转矩阵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--;
		}
	}
};


猜你喜欢

转载自blog.csdn.net/qq_18124075/article/details/80736889