算法集合-二维数组

2 篇文章 0 订阅

算法集合-二维数组

本题并不涉及到什么算法,就是模拟过程,但却十分考察对代码的掌控能力
解题关键: 找出边界条件, 找出循环不变量

算法题目
题目59.螺旋矩阵II

给你一个正整数n ,生成一个包含 1 到n2所有元素,
且元素按顺时针顺序螺旋排列的n x n 正方形矩阵 matrix .

示例 1:

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

输入:n = 1
输出:[[1]]

解题思路:

生成一个 n×n 空矩阵 mat,随后模拟整个向内环绕的填入过程:
假设初始每圈的初始点都是(x0,y0)

 1. 从左至右填入上层元素, 依次为(x0,y0)(xn,y0), 也就是y轴不动, n代表矩阵的长度
 2. 从上到下填入右侧元素, 依次为(xn,y1)(xn,yn), 注意这里的开始值是y(0+1)
 3. 从右至左填入下层元素, 依次为(xn-1,yn)(x0,yn), 注意这里开始值x(n-1)
 4. 从下到上填入左侧元素, 依次为(x0,yn-1)(x0,y1), 注意这里开始值y(n-1)
 5. 转过一圈之后, x轴和y轴的下脚边想里缩一圈, 也就是(x1,y1)->(xn-1,yn-1)
 6. 本逻辑中, 还需要一个数字记录数字的增长

解题思路图解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

func generateMatrix(n int) [][]int {
	vector := make([][]int, n)
	for i := range vector {
		vector[i] = make([]int, n)
	}

	num := 1
	x0, xn, y0, yn := 0, n-1, 0, n-1
	for x0 <= xn && y0 <= yn{
		for i:=x0; i<=xn; i++{
			vector[y0][i] = num
			num ++
		}

		for j:=y0+1; j<=yn; j++{
			vector[j][xn] = num
			num++
		}

		if x0 < xn && y0 <yn{
			for i:=xn-1; i>=x0; i--{
				vector[yn][i] = num
				num ++
			}

			for j:=yn-1; j>y0; j--{
				vector[j][x0] = num
				num ++
			}
		}

		x0++
		y0++
		xn--
		yn--
	}

	return vector
}
// 这里注意下二维数据外层代表行, 内层代表列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值