当前位置: 面试刷题>> 等差矩阵 (经典算法题500道)


### 题目描述补充 **题目:等差矩阵补全** 给定一个部分填充的二维矩阵(等差矩阵),其中某些元素已经给出,其余元素需要根据等差数列的规则进行补全。矩阵的每一行和每一列都形成一个等差数列。即,同一行中,任意两个相邻元素之差相等;同一列中,任意两个相邻元素之差也相等。 **输入**: - 一个二维数组(矩阵),其中包含整数(部分元素为`null`或特定占位符表示未知,如`0`或`-1`)。 - 行差(row_diff)和列差(col_diff),分别表示行与行之间、列与列之间等差数列的公差。 **输出**: - 补全后的二维数组(矩阵),其中所有未知元素均根据等差数列规则填充。 **示例**: 输入矩阵(使用`0`表示未知): ``` [ [1, 0, 0], [0, 0, 3], [0, 5, 0] ] ``` 行差(row_diff)= 1,列差(col_diff)= 2 输出矩阵: ``` [ [1, 3, 5], [2, 4, 6], [3, 5, 7] ] ``` ### PHP 示例代码 ```php function completeMatrix($matrix, $row_diff, $col_diff) { $rows = count($matrix); if ($rows == 0) return []; $cols = count($matrix[0]); // 初始化第一行和第一列 for ($i = 1; $i < $cols; $i++) { $matrix[0][$i] = $matrix[0][$i-1] + $col_diff; } for ($i = 1; $i < $rows; $i++) { $matrix[$i][0] = $matrix[$i-1][0] + $row_diff; } // 补全其他元素 for ($i = 1; $i < $rows; $i++) { for ($j = 1; $j < $cols; $j++) { $matrix[$i][$j] = $matrix[$i-1][$j] + $col_diff; // 或者使用上一行的同一列元素加上行差(两种方式结果相同,因为行差和列差已知) // $matrix[$i][$j] = $matrix[$i][$j-1] + $row_diff - $col_diff; } } return $matrix; } // 示例 $matrix = [ [1, 0, 0], [0, 0, 3], [0, 5, 0] ]; $row_diff = 1; $col_diff = 2; $result = completeMatrix($matrix, $row_diff, $col_diff); print_r($result); ``` ### Python 示例代码 ```python def complete_matrix(matrix, row_diff, col_diff): rows, cols = len(matrix), len(matrix[0]) # 初始化第一行和第一列 for i in range(1, cols): matrix[0][i] = matrix[0][i-1] + col_diff for i in range(1, rows): matrix[i][0] = matrix[i-1][0] + row_diff # 补全其他元素 for i in range(1, rows): for j in range(1, cols): matrix[i][j] = matrix[i-1][j] + col_diff return matrix # 示例 matrix = [ [1, 0, 0], [0, 0, 3], [0, 5, 0] ] row_diff = 1 col_diff = 2 result = complete_matrix(matrix, row_diff, col_diff) print(result) ``` ### JavaScript 示例代码 ```javascript function completeMatrix(matrix, rowDiff, colDiff) { const rows = matrix.length; const cols = matrix[0].length; // 初始化第一行和第一列 for (let j = 1; j < cols; j++) { matrix[0][j] = matrix[0][j-1] + colDiff; } for (let i = 1; i < rows; i++) { matrix[i][0] = matrix[i-1][0] + rowDiff; } // 补全其他元素 for (let i = 1; i < rows; i++) { for (let j = 1; j < cols; j++) { matrix[i][j] = matrix[i-1][j] + colDiff; } } return matrix; } // 示例 const matrix = [ [1, 0, 0], [0, 0, 3], [0, 5, 0] ]; const rowDiff = 1; const colDiff = 2; const result = completeMatrix(matrix, rowDiff, colDiff); console.log(result); ``` **码小课**网站中有更多相关内容分享给大家学习,包括但不限于算法设计、数据结构、编程技巧等,欢迎访问学习。
推荐面试题