当前位置: 面试刷题>> 等差矩阵 (经典算法题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 示例代码

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 示例代码

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 示例代码

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);

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法设计、数据结构、编程技巧等,欢迎访问学习。

推荐面试题