题意:
给你两个非负整数数组 rowSum 和 colSum ,
其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和。
换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。
请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵,
且该矩阵满足 rowSum 和 colSum 的要求。
请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。
数据范围:
1 <= rowSum.length, colSum.length <= 500
0 <= rowSum[i], colSum[i] <= 1e8
sum(rows) == sum(columns)
解法:
样例:
r[]={3,8}
c[]={4,7}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4067c3307ba81c23ffbfb57361177e18.png)
第一行遍历过去,如果<=r[i],那么留下,将多出来的推到下一行即可.
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/803de2b6cf7cafb2b0ed19d641d9f385.png)
code:
class Solution {
public:
vector<vector<int>> restoreMatrix(vector<int>& r, vector<int>& c) {
int n=r.size(),m=c.size();
vector<vector<int> >a(n,vector<int>(m));
for(int j=0;j<m;j++)a[0][j]=c[j];
for(int i=0;i<n-1;i++){
for(int j=0;j<m;j++){
if(a[i][j]<=r[i]){
r[i]-=a[i][j];
}else{
a[i+1][j]=a[i][j]-r[i];
a[i][j]=r[i];
r[i]=0;
}
}
}
return a;
}
};