当前位置: 面试刷题>> 黑白屏 (经典算法题500道)


题目描述补充

题目:黑白屏问题

在一个二维网格中,每个格子可以是黑色或白色。你需要编写一个算法,以特定的方式翻转网格中的颜色(黑色变白色,白色变黑色),并输出翻转后的网格。翻转的方式有两种:

  1. 水平翻转:将整个网格沿着水平方向翻转。
  2. 垂直翻转:将整个网格沿着垂直方向翻转。

输入

  • 一个二维数组,表示初始的网格状态,其中0代表黑色,1代表白色。
  • 一个字符串,表示要进行的翻转操作('H' 表示水平翻转,'V' 表示垂直翻转)。

输出

  • 翻转后的二维网格。

示例

输入

网格:
[
  [0, 1, 0],
  [1, 0, 1],
  [0, 1, 0]
]
操作: "H"

输出

[
  [0, 0, 1],
  [1, 1, 0],
  [0, 0, 1]
]

PHP 示例代码

function flipGrid($grid, $operation) {
    $rows = count($grid);
    $cols = count($grid[0]);

    if ($operation == 'H') {
        // 水平翻转
        for ($i = 0; $i < $rows; $i++) {
            for ($j = 0; $j < $cols / 2; $j++) {
                $temp = $grid[$i][$j];
                $grid[$i][$j] = $grid[$i][$cols - $j - 1];
                $grid[$i][$cols - $j - 1] = $temp;
            }
        }
    } elseif ($operation == 'V') {
        // 垂直翻转
        for ($j = 0; $j < $cols; $j++) {
            for ($i = 0; $i < $rows / 2; $i++) {
                $temp = $grid[$i][$j];
                $grid[$i][$j] = $grid[$rows - $i - 1][$j];
                $grid[$rows - $i - 1][$j] = $temp;
            }
        }
    }

    return $grid;
}

// 示例
$grid = [
    [0, 1, 0],
    [1, 0, 1],
    [0, 1, 0]
];
$operation = "H";
$result = flipGrid($grid, $operation);
print_r($result);

Python 示例代码

def flip_grid(grid, operation):
    if operation == 'H':
        # 水平翻转
        return [row[::-1] for row in grid]
    elif operation == 'V':
        # 垂直翻转
        return [list(col) for col in zip(*grid[::-1])]

# 示例
grid = [
    [0, 1, 0],
    [1, 0, 1],
    [0, 1, 0]
]
operation = "H"
result = flip_grid(grid, operation)
print(result)

JavaScript 示例代码

function flipGrid(grid, operation) {
    const rows = grid.length;
    const cols = grid[0].length;

    if (operation === 'H') {
        // 水平翻转
        for (let i = 0; i < rows; i++) {
            let left = 0, right = cols - 1;
            while (left < right) {
                [grid[i][left], grid[i][right]] = [grid[i][right], grid[i][left]];
                left++;
                right--;
            }
        }
    } else if (operation === 'V') {
        // 垂直翻转
        const flipped = [];
        for (let j = 0; j < cols; j++) {
            const col = [];
            for (let i = rows - 1; i >= 0; i--) {
                col.push(grid[i][j]);
            }
            flipped.push(col);
        }
        return flipped;
    }

    return grid;
}

// 示例
const grid = [
    [0, 1, 0],
    [1, 0, 1],
    [0, 1, 0]
];
const operation = "H";
const result = flipGrid(grid, operation);
console.log(result);

以上示例展示了如何在PHP、Python和JavaScript中实现黑白屏问题的水平翻转和垂直翻转功能。注意,每种语言的代码都经过了适当的注释和说明,以便理解和使用。

推荐面试题