栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【leetcode54】螺旋矩阵

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【leetcode54】螺旋矩阵

题目描述

力扣54.螺旋矩阵
难度:中等 .
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

代码:
package main

func spiralOrder(matrix [][]int) []int {
	resArr:=[]int{}//定义一个返回结果的切片
	m:=len(matrix)//
	n:=len(matrix[0])
	if m==0||n==0{
		return resArr
	}
	//记录移动的位置,顺时针是右下左上
	xArray:=[4]int{0,1,0,-1}
	yArray:=[4]int{1,0,-1,0}

	count:=m*n
	//定义一个辅助数组,默认是false,访问之后标记为true并且不再访问
	//go语言的二位数组的初始化,需要注意。
	visited:=make([][]bool,m)
	for i:=0;i
		visited[i]=make([]bool,n)
	}
	x,y:=0,0
	temp:=0
	xindex,yindex:=0,0
	for i:=0;i
		temp=matrix[x][y]
		resArr=append(resArr,temp)
		visited[x][y]=true//标记为已经访问过
		newX,newY:=x+xArray[xindex],y+yArray[yindex]//移动至下一位的位置
		//如果下一位已经访问过或者数组越界,我们需要修改方向
		if newX<0||newY<0||newX>=m||newY>=n||visited[newX][newY]==true{
			xindex=(xindex+1)%4
			yindex=(yindex+1)%4
		}
		//下一次访问的数组的位置
		x=x+xArray[xindex]
		y=y+yArray[yindex]
	}
	return resArr
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925804.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号