消消乐

消消乐是一个经典的益智游戏,在消除匹配的方块后,你需要实现重力下落算法来处理剩余方块的位置调整。

游戏规则

  • 游戏板是一个 n×n 的网格,填充着不同颜色/类型的方块
  • 当匹配的方块被消除后,这些位置会变成空格(用 0 表示)
  • 由于重力作用,所有非空方块应该向下移动,直到遇到底部或其他方块
  • 空格(0)最终会聚集在顶部

你的任务

实现一个 applyGravity 函数,处理方块消除后的下落逻辑。

输入输出

  • board: 游戏板二维数组,数字表示不同类型的方块,0表示被消除的空格
  • 重要:函数需要直接修改传入的 board 数组,无需返回值

算法要求

  • 对每一列独立处理重力下落
  • 将所有非零方块向下移动到最底部可能的位置
  • 保持非零方块的原有顺序
  • 所有空格(0)移动到列的顶部
  • 必须原地修改数组,不要创建新的数组

示例

输入:
board = [
  [1, 2, 5, 4],
  [1, 3, 0, 5],
  [0, 0, 0, 0],
  [3, 1, 0, 2]
]

执行 applyGravity(board) 后,board 数组被修改为:
[
  [0, 0, 0, 0],  // 空格移动到顶部
  [1, 2, 0, 4],  // 非零方块下落
  [1, 3, 0, 5],
  [3, 1, 5, 2]   // 所有非零方块沉底
]

解释

每一列的变化:

  • 第1列:[1, 1, 0, 3] → [0, 1, 1, 3]
  • 第2列:[2, 3, 0, 1] → [0, 2, 3, 1]
  • 第3列:[5, 0, 0, 0] → [0, 0, 0, 5]
  • 第4列:[4, 5, 0, 2] → [0, 4, 5, 2]

算法思路

  1. 对每一列进行处理
  2. 收集该列所有非零元素
  3. 将非零元素放置在列的底部
  4. 用零填充列的顶部空位
  5. 注意:直接修改原数组的对应位置