LeetCode Spiral Matrix 题解

该题目的详细内容如下截图:
在这里插入图片描述
分析:题目是想让我们将一个二维的矩阵按照螺旋的方式输出。如下图的描述所示:
在这里插入图片描述
(原谅我用word画的一个awful的图示)所以,不难想到应该可以在O(1)的时间复杂度内解决这个问题。
思路:
1,设置四个障碍,分别表示行起始下标,终止下标;列起始下标,终止下标。2,待输出的指示器触碰到任何一个障碍时,输出方向就做相应的改变,同时,需要重新调整障碍。调整规律如下:

  • 1,碰到列的终止下标时,列的终止下标减一,方向改为竖直向下。
  • 2,碰到列的起始下标时,列的起始下标加一,方向改为竖直向上。
  • 3,碰到行的起始下标时,行的起始下标加一,方向改为水平向右。
  • 4,碰到行的终止下标时,行的终止下标减一,方向改为水平向左。
    3,上代码:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
	vector<int> fin;
	if (matrix.size() == 0)
		return fin;
	int barricadeRow = 0, barricadeColumn = 0;
	int upperboundRow = matrix.size() - 1, upperboundColumn = matrix[0].size() - 1;
	int tar = 4;
	for (int i = 0, j = -1, count = 0; count < matrix.size() * matrix[0].size(); count++)
	{
		if (i == barricadeRow&&tar==4)
		{
			barricadeRow++;
			tar = 1;
		}
		else if (j == barricadeColumn&&tar==3)
		{
			barricadeColumn++;
			tar = 4;
		}
		else if (i == upperboundRow&&tar==2)
		{
			upperboundRow--;
			tar = 3;
		}
		else if (j == upperboundColumn&&tar==1)
		{
			upperboundColumn--;
			tar = 2;
		}
		if (tar == 1)
			j++;
		else if (tar == 2)
			i++;
		else if (tar == 3)
			j--;
		else
			i--;
		fin.push_back(matrix[i][j]);
	}
	return fin;
}

4,运行结果(0ms也是够快的,哈哈)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值