ในแพลตฟอร์มที่แตกต่างกัน มีฟังก์ชันที่มีประโยชน์มากที่เรียกว่า '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, ],]