leetcode_59题——Spiral Matrix II(数组)

Spiral Matrix II

  Total Accepted: 28996 Total Submissions: 91437My Submissions

 

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[

 [ 1, 2, 3 ],

 [ 8, 9, 4 ],

 [ 7, 6, 5 ]

]

 

Hide Tags
  Array
 
      这道题,需要将1...到n^2的所有数以螺旋的方式写到数组中,我采用的是一圈一圈的从外往里写,这个思路比较直接,而且时间复杂度为O(n),在可接受的范围之内
#include<iostream>

#include<vector>

using namespace std;



vector<vector<int> > generateMatrix(int n) {

	vector<vector<int> >last_result;

	vector<int> temp;

	if(n<=0)

		return last_result;

	if(n==1)

	{

		temp.push_back(1);

		last_result.push_back(temp);

		return last_result;

	}

	for(int j=0;j<n;j++)

		temp.push_back(0);

	for(int i=0;i<n;i++)

		last_result.push_back(temp);



	int quan=n;

	int start_quan=1;

	int x1=0,x2=0;

	int y1=0,y2=n-1;

	int m1=n-1,m2=n-1;

	int n1=n-1,n2=0;

	while(quan>0)

	{

		for(int i=x2;i<=x2+quan-2;i++)

		{

			last_result[x1][i]=start_quan;

			start_quan++;

		}

		for(int i=y1;i<=y1+quan-2;i++)

		{

			last_result[i][y2]=start_quan;

			start_quan++;

		}

		for(int i=m2;i>=m2-(quan-2);i--)

		{

			last_result[m1][i]=start_quan;

			start_quan++;

		}

		for(int i=n1;i>=n1-(quan-2);i--)

		{

			last_result[i][n2]=start_quan;

			start_quan++;

		}

		quan-=2;

		x1++;x2++;

		y1++;y2--;

		m1--;m2--;

		n1--;n2++;



		if(quan==1)

		{

			last_result[x1][x2]=start_quan;

			break;

		}

	}

	return last_result;

}



int main()

{

	vector<vector<int> > vec;

	int n=4;

	vec=generateMatrix(n);

	for(int i=0;i<n;i++)

	{

		for(int j=0;j<n;j++)

			cout<<vec[i][j]<<' ';

		cout<<endl;

	}



}

  

你可能感兴趣的:(LeetCode)