class Solution {
public:
vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) {
const int row = rowSum.size();
const int col = colSum.size();
vector<vector<int>> res(row, vector<int>(col));
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
res[i][j] = min(rowSum[i], colSum[j]);
rowSum[i] = rowSum[i] - res[i][j];
colSum[j] = colSum[j] - res[i][j];
}
}
return res;
}
};
思路:做得时候想不出来,只想到了要不要考虑回溯,不断试错。但想了想时间花费太大。
然后题解中的贪心算法显然极其优秀。
更快的案例:
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)); int t1 = 0, t2 = 0; while (t1 < n && t2 < m) { int v = min(rowSum[t1], colSum[t2]); res[t1][t2] = v; rowSum[t1] -= v; colSum[t2] -= v; if (rowSum[t1] == 0) { ++ t1; } if (colSum[t2] == 0) { ++ t2; } } return res; } };