消消乐是一个经典的益智游戏,在消除匹配的方块后,你需要实现重力下落算法来处理剩余方块的位置调整。
游戏规则
- 游戏板是一个 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]
算法思路
- 对每一列进行处理
- 收集该列所有非零元素
- 将非零元素放置在列的底部
- 用零填充列的顶部空位
- 注意:直接修改原数组的对应位置