当前位置: 面试刷题>> 黑白屏 (经典算法题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 示例代码
```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 示例代码
```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 示例代码
```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中实现黑白屏问题的水平翻转和垂直翻转功能。注意,每种语言的代码都经过了适当的注释和说明,以便理解和使用。