笔试题72. LeetCode OJ (59)

笔试题72. LeetCode OJ (59)_第1张图片

    Spiral Matrix II

    看上图就能知道这个提示要干什么的,给定一个 n 值,按照螺旋数组的存储特点将 1~N^2 存放到螺旋数组中。

    思路:使用一个计数器(引用的方式使用),然后按照螺旋数组的方式去遍历的特点依次将该计数器的值赋给数组相应的位置,遍历完成后就是上述的样子了了,需要注意一下几点。

  1.我们需要实现分配空间(讲vector的大小给定),否则肯定会崩溃的...

  2.还是需要注意螺旋数组中一下常见问题,如重复问题,越界问题等等

代码如下:

   

class Solution {
public:
	vector<vector<int>> generateMatrix(int n)
	{
		vector<vector<int>> ret;
		ret.resize(n);
		for (int i = 0; i < n; ++i)
		{
			ret[i].resize(n);
		}
		
	    if(n <= 0)
	    {
	        return ret;
	    }
	    
		int OneToN = 0; //计数器
		for (int i = 0; i <= (n-1) / 2; ++i)
		{
			_Trace(ret, i, OneToN);
		}

		return ret;
	}

	void _Trace(vector<vector<int>>& mesh, int pos, int& count)
	{
		int n = mesh.size();
		for (int i = pos; i < n - pos; ++i)
		{//左到右
			mesh[pos][i] = ++count;
		}

		for (int i = pos + 1; i < n-pos; ++i)
		{//上到下
			mesh[i][n-pos-1] = ++count;
		}

		for (int i = n - pos - 2; i >= pos && pos < n/2; --i)
		{ //右到左,注意重复问题
			mesh[n-pos-1][i] = ++count;
		}

		for (int i = n - pos - 2; i>pos && pos < n / 2; --i)
		{ //下到上,注意重复问题
			mesh[i][pos] = ++count;
		}
	}
};
结果如下:


你可能感兴趣的:(LeetCode,C++,算法,螺旋数组)