這是一道關於二維向量的題目。
提示:1.關於二維向量的輸入:
vector<vector<int>>
test;
vector<int>
v;
//輸入
for
(int i =
0; i<n; i++) {
v.clear();
//每次記得clear:)
for
(int j =
0; j < n; j++){
cin
>> temp;
v.push_back(temp);
}
test.push_back(v);
}
2.關於二維向量的大小:
test.size(); //這是行的大小
test[i].size(); //這是列的大小
3.概念(忘記是那個大神的結論):
不像二維數組那樣,可以直接對arr[i][j]進行循環賦值。在vector<vector<int>>中,因爲vector是一個容器,最外層的vector容器中放着更小的vector,而裏層的vector裏面放的是int型的數字。所以我們首先要對裏層的vector容器賦值,然後再把裏層的vector作爲元素插入到外層的vector中
題解:
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
vector<vector<int>> t;
int k=0,l=0;
vector<int> v;
int sum=0;
for(int i=0;i<nums.size();i++){
sum+=nums[i].size();
}
if(r*c==sum){
for(int i=0;i<r;i++){
v.clear();
for(int j=0;j<c;j++){
if(k<nums[l].size()){
v.push_back(nums[l][k]);
k++;
}else{
k=0;
l++;
v.push_back(nums[l][k]);
k++;
}
}
t.push_back(v);
}
return t;
}else{
return nums;
}
}
};