1886. 判断矩阵经轮转后是否一致
This commit is contained in:
parent
b0641080b5
commit
60447f6bf8
55
src/main.rs
55
src/main.rs
|
|
@ -1,36 +1,43 @@
|
||||||
use std::cmp::min;
|
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn min_abs_diff(grid: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {
|
fn is_same(mat: &Vec<Vec<i32>>, target: &Vec<Vec<i32>>) -> bool {
|
||||||
let k = k as usize;
|
for i in 0..mat.len() {
|
||||||
let mut ans = vec![vec![0; grid[0].len()-k+1]; grid.len()-k+1];
|
for j in 0..mat[i].len() {
|
||||||
for i in 0..grid.len() - k+1 {
|
if mat[i][j] != target[i][j] {
|
||||||
for j in 0..grid[i].len() - k+1 {
|
return false;
|
||||||
let mut arr = Vec::<i32>::with_capacity(k*k);
|
|
||||||
for l in 0..k {
|
|
||||||
for m in 0..k {
|
|
||||||
let val = grid[i+l][j+m];
|
|
||||||
arr.push(val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
arr.sort_unstable();
|
|
||||||
let mut val = 1e9 as i32;
|
|
||||||
for i in 1..arr.len() {
|
|
||||||
if arr[i-1] == arr[i] {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
val = min(val,(arr[i]-arr[i-1]).abs());
|
|
||||||
}
|
|
||||||
ans[i][j] = if val == 1e9 as i32 { 0 } else { val };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ans
|
true
|
||||||
|
}
|
||||||
|
pub fn find_rotation(mat: Vec<Vec<i32>>, target: Vec<Vec<i32>>) -> bool {
|
||||||
|
let mut v = vec![vec![0; mat[0].len()]; mat.len()];
|
||||||
|
if Solution::is_same(&mat, &target) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for x in 1..4 {
|
||||||
|
for i in 0..mat.len() {
|
||||||
|
for j in 0..mat[i].len() {
|
||||||
|
let (mut py, mut px) = (i, j);
|
||||||
|
for _ in 0..x {
|
||||||
|
(px, py) = (mat.len() - 1 - py, px)
|
||||||
|
}
|
||||||
|
v[py][px] = mat[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if Self::is_same(&v, &target) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::min_abs_diff(arr::make_matrix(r#"[[1,8],[3,-2]]"#), 2);
|
let result = Solution::find_rotation(
|
||||||
|
arr::make_matrix(r#"[[1,0,0],[1,0,1],[0,0,1]]"#),
|
||||||
|
arr::make_matrix(r#"[[0,1,1],[0,0,0],[1,1,0]]"#),
|
||||||
|
);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue