码迷,mamicode.com
首页 > 其他好文 > 详细

笔试题72. LeetCode OJ (59)

时间:2016-06-03 19:37:55      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

    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)

标签:

原文地址:http://blog.csdn.net/zr1076311296/article/details/51568717

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!