笔试题72. LeetCode OJ (59)

Posted _从未止步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试题72. LeetCode OJ (59)相关的知识,希望对你有一定的参考价值。

    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;
		}
	}
};
结果如下:


以上是关于笔试题72. LeetCode OJ (59)的主要内容,如果未能解决你的问题,请参考以下文章

笔试题56. LeetCode OJ (43)

笔试题57. LeetCode OJ (44)

笔试题61. LeetCode OJ (48)

笔试题55. LeetCode OJ (42)

笔试题65. LeetCode OJ (52)

笔试题54. LeetCode OJ (41)