📘 題目敘述
給你一個 n x n 的整數矩陣 grid。
如果某一列(row)與某一行(column)完全相同(也就是每個位置的數值都一樣),則稱這一對 (row, column) 是一個 相等對(equal pair)。
請回傳 grid 中相等的 (row, column) 對的數量。
條件限制
1 <= n <= 2001 <= grid[i][j] <= 10^5
🧠 解題思路
我的做法是最直觀的 暴力比對:
- 枚舉每一列
i - 枚舉每一行
j - 逐格檢查這一列
i的第k個元素grid[i][k]是否等於這一行j的第k個元素grid[k][j]
只要整個 k = 0..n-1 都相同,代表:
- 第
i列 = 第j行 count++
所有變數
count:最後要回傳的相等(row, column)對數量i:目前選到的 row 編號j:目前選到的 column 編號k:用來逐格比對 row 與 column 的索引check:判斷「目前這組(i, j)是否完全相等」的旗標- 只要某格不相等就設成
false並break
- 只要某格不相等就設成
🪜 主要流程步驟
1. 枚舉所有 row 和 column 的配對
- 外層
i:跑過所有 row - 中層
j:對固定的 row,跑過所有 column - 這樣就會把所有
(i, j)都檢查一遍
2. 對固定的 (i, j) 做逐格比對
- 先把
check = true,假設它們相等 - 用
k從0..n-1檢查:
grid[i][k](row i 的第 k 格)grid[k][j](column j 的第 k 格)
- 只要出現任何一格不同:
check = falsebreak(這對不用再比了)
3. 若整條都相等就計數
k比對完都沒出錯 →check仍是true- 代表 row i 與 column j 完全相同
count++
💻 程式碼實作
class Solution {
public:
int equalPairs(vector<vector<int>>& grid) {
int count = 0;
for (int i = 0; i < grid.size(); i++) {
bool check = true;
for (int j = 0; j < grid.size(); j++) {
check = true;
for (int k = 0; k < grid.size(); k++) {
if (grid[i][k] != grid[k][j]) {
check = false;
break;
}
}
if (check) {
count++;
}
}
}
return count;
}
};
🔗 題目連結
https://leetcode.com/problems/equal-row-and-column-pairs/