Easy
Determine Whether Matrix Can Be Obtained By Rotation — C++
Full explanation · Time O(m * n) · Space O(1)
// Time: O(m * n)
// Space: O(1)
class Solution {
public:
bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) {
vector<function<bool (int, int)>> checks = {
[&mat, &target](int i, int j) { return mat[i][j] == target[i][j]; },
[&mat, &target](int i, int j) { return mat[i][j] == target[j][size(mat) - 1 - i]; },
[&mat, &target](int i, int j) { return mat[i][j] == target[size(mat) - 1 - i][size(mat[0]) - 1 - j]; },
[&mat, &target](int i, int j) { return mat[i][j] == target[size(mat[0]) - 1 - j][i]; },
};
const auto& traverse = [&mat, &target](const auto& check) {
for (int i = 0; i < size(mat); ++i) {
for (int j = 0; j < size(mat[0]); ++j) {
if (!check(i, j)) {
return false;
}
}
}
return true;
};
for (const auto& check : checks) {
if (traverse(check)) {
return true;
}
}
return false;
}
};