1605.给定行和列的和求可行矩阵
链接:1605.给定行和列的和求可行矩阵
难度:Medium
标签:贪心、数组、矩阵
简介:请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵,且该矩阵满足 rowSum 和 colSum 的要求。
题解 1 - rust
- 编辑时间:2023-03-14
- 执行用时:60ms
- 内存消耗:3.5MB
- 编程语言:rust
- 解法介绍:同上。
impl Solution {
    pub fn restore_matrix(mut row_sum: Vec<i32>, mut col_sum: Vec<i32>) -> Vec<Vec<i32>> {
        let (n, m) = (row_sum.len(), col_sum.len());
        let mut res = vec![vec![0; m]; n];
        let (mut i, mut j) = (0, 0);
        while i < n && j < m {
            let v = row_sum[i].min(col_sum[j]);
            res[i][j] = v;
            row_sum[i] -= v;
            col_sum[j] -= v;
            if row_sum[i] == 0 {
                i += 1;
            }
            if col_sum[j] == 0 {
                j += 1;
            }
        }
        res
    }
}
题解 2 - python
- 编辑时间:2023-03-14
- 执行用时:64ms
- 内存消耗:19.5MB
- 编程语言:python
- 解法介绍:遍历。
class Solution:
    def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]:
        n, m = len(rowSum), len(colSum)
        res = [[0] * m for _ in range(n)]
        i, j = 0, 0
        while i < n and j < m:
            v = min(rowSum[i], colSum[j])
            res[i][j] = v
            rowSum[i] -= v
            colSum[j] -= v
            if not rowSum[i]:
                i += 1
            if not colSum[j]:
                j += 1
        return res
题解 3 - cpp
- 编辑时间:2023-03-14
- 执行用时:48ms
- 内存消耗:32.6MB
- 编程语言:cpp
- 解法介绍:遍历。
class Solution {
public:
    vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) {
        int n = rowSum.size(), m = colSum.size();
        vector<vector<int>> res(n, vector<int>(m, 0));
        for (int i = 0, j = 0; i < n && j < m;) {
            int v = min(rowSum[i], colSum[j]);
            res[i][j] = v;
            rowSum[i] -= v;
            colSum[j] -= v;
            if (rowSum[i] == 0) i++;
            if (colSum[j] == 0) j++;
        }
        return res;
    }
};