ในแพลตฟอร์มที่แตกต่างกัน มีฟังก์ชันที่มีประโยชน์มากที่เรียกว่า 'reshape' ฟังก์ชันนั้นใช้เพื่อเปลี่ยนรูปร่างเมทริกซ์ให้มีขนาดแตกต่างกัน แต่ข้อมูลจะเหมือนกัน ดังนั้น หากเรามีเมทริกซ์และค่า r และ c สองค่าสำหรับหมายเลขแถวและหมายเลขคอลัมน์ของเมทริกซ์ที่ปรับรูปร่างที่ต้องการ ตามลำดับ
ดังนั้น หากอินพุตเป็น [[5,10],[15,20]], row =1 และ col =4 ผลลัพธ์จะเป็น [[5, 10, 15, 20]]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้-
-
กำหนดอุณหภูมิอาร์เรย์
-
กำหนดขนาดอาร์เรย์ 2 มิติหนึ่งขนาด (r x c)
-
นับ :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
ใส่ nums[i, j] ที่ส่วนท้ายของอุณหภูมิ
-
-
-
ถ้า r * c ไม่เท่ากับขนาดของ nums แล้ว −
-
ส่งคืนหมายเลข
-
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
นับ =นับ + 1
-
res[i, j] :=temp[นับ]
-
-
-
ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto>> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
vector<int> temp;
vector<vector<int> > res(r, vector<int>(c));
int count = 0;
for (int i = 0; i < nums.size(); i++) {
for (int j = 0; j < nums[0].size(); j++) {
temp.push_back(nums[i][j]);
}
}
if (r * c != nums.size() * nums[0].size())
return nums;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
res[i][j] = temp[count++];
}
}
return res;
}
};
main(){
Solution ob;
vector<vector<int>> v = {{5,10},{15,20}};
print_vector(ob.matrixReshape(v, 1, 4));
} อินพุต
{{5,10},{15,20}}, 1, 4 ผลลัพธ์
[[5, 10, 15, 20, ],]