1605. 给定行和列的和求可行矩阵
思路:大佬题解,方法一,每次到达一个位置[i,j],我们选最小的min(rowSum[i],colSum[j])来赋值,这样就不会超过某一行或某一列的和。赋值完要记得进行更新操作。
class Solution {
public:
vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) {
int n=rowSum.size(),m=colSum.size();
vector<vector<int>> v(n,vector<int>(m,0));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(rowSum[i]<colSum[j]){
v[i][j]=rowSum[i];
colSum[j]-=rowSum[i];
rowSum[i]=0;
}else{
v[i][j]=colSum[j];
rowSum[i]-=colSum[j];
colSum[j]=0;
}
}
}
return v;
}
};
思路:方法二,每次相当于只能向下和向右走。
class Solution {
public:
vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) {
int n=rowSum.size(),m=colSum.size();
vector<vector<int>> v(n,vector<int>(m,0));
for(int i=0,j=0;i<n&&j<m;){
if(rowSum[i]<colSum[j]){
v[i][j]=rowSum[i];
colSum[j]-=rowSum[i];
i++;
}else{
v[i][j]=colSum[j];
rowSum[i]-=colSum[j];
j++;
}
}
return v;
}
};