青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI 刷题

70 阅读4分钟

题目解析

题目
在一个 n x n 的方阵中填入 1 到 n x n 这些数字,要求按照蛇形顺序从右上角开始,沿着方阵的边界顺时针进行填充。

思路

  1. 初始化矩阵:创建一个 n x n 的矩阵,所有元素初始化为 0

  2. 定义方向:使用四个方向(右、下、左、上)的偏移量来表示当前应该向哪个方向移动。

  3. 初始位置:从右上角开始,即 (0, n-1)

  4. 填充数字

    • 从 1 到 n x n 依次填充数字。
    • 每次填充完一个数字后,尝试按照当前方向移动到下一个位置。
    • 如果下一个位置越界或已经填充过数字,则改变方向(顺时针旋转)。
    • 更新当前位置为新的位置,继续填充下一个数字。

图解
以 n=4 为例:

  1. 初始位置 (0, 3),填充 1
  2. 向右移动到 (0, 2),填充 2
  3. 继续向右移动到 (0, 1),填充 3
  4. 向右移动到 (0, 0),填充 4
  5. 尝试向右移动到 (-1, 0)(越界),改变方向向下,移动到 (1, 0),填充 5
  6. 依此类推,直到所有数字填充完毕。

代码详解

python复制代码
	def solution(n: int) -> list:

	    # 初始化一个 n x n 的矩阵,所有元素为 0

	    matrix = [[0] * n for _ in range(n)]

	    

	    # 定义四个方向:右、下、左、上

	    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]

	    

	    # 初始位置和方向

	    x, y = 0, n - 1  # 从右上角开始

	    direction_index = 0  # 初始方向为右

	    

	    # 填充数字

	    for num in range(1, n * n + 1):

	        # 填充当前位置

	        matrix[x][y] = num

	        

	        # 计算下一个位置

	        next_x = x + directions[direction_index][0]

	        next_y = y + directions[direction_index][1]

	        

	        # 检查下一个位置是否越界或已经填充

	        if not (0 <= next_x < n and 0 <= next_y < n and matrix[next_x][next_y] == 0):

	            # 改变方向

	            direction_index = (direction_index + 1) % 4

	            next_x = x + directions[direction_index][0]

	            next_y = y + directions[direction_index][1]

	        

	        # 更新当前位置

	        x, y = next_x, next_y

	    

	    return matrix

知识总结

新知识点

  • 方向数组:使用数组来表示方向(偏移量),可以方便地改变移动方向。
  • 边界检查:在移动位置时,需要进行边界检查,确保不会越界。
  • 矩阵初始化:使用列表推导式可以方便地初始化一个 n x n 的矩阵。

理解

  • 方向数组的使用可以简化代码,使方向改变更加直观。
  • 边界检查和方向改变是解决此类问题的关键。

学习建议

  • 熟练掌握方向数组的使用,可以在很多类似的算法问题中应用。
  • 多做类似的题目,加深对边界检查和方向改变的理解。

学习计划

刷题计划

  1. 每日一题:每天至少刷一道类似的算法题,保持手感。
  2. 总结归纳:每刷完一定数量的题目后,总结归纳解题思路和技巧。

利用错题

  1. 分析错误:每次遇到错题,都要认真分析错误原因,找出问题所在。
  2. 重做错题:将错题记录下来,定期重做,确保真正掌握。
  3. 举一反三:通过错题,思考类似问题的解决方法,提高解题能力。

工具运用

AI刷题功能

  • 智能推荐:利用AI刷题功能,根据当前的学习进度和能力,智能推荐适合的题目。
  • 解析讲解:对于难以理解的题目,可以查看AI提供的解析和讲解,加深理解。
  • 错题集:利用AI记录错题,方便随时查看和重做。

其他学习资源

  • 教程视频:观看相关的算法教程视频,加深对算法的理解。
  • 在线课程:参加在线算法课程,系统学习算法知识和技巧。
  • 编程社区:加入编程社区,与其他编程爱好者交流学习心得和经验。

学习建议

  • 将AI刷题功能与其他学习资源相结合,形成互补,提高学习效果。
  • 定期回顾和总结,巩固所学知识。
  • 保持积极的学习态度,不断挑战自己,提高自己的算法能力。