esc to dismiss
x

信息

题解

pub fn num_magic_squares_inside(grid: Vec<Vec<i32>>) -> i32 {
    let (_r, _c) = (grid.len(), grid.first().unwrap().len());
    if _r < 3 || _c < 3 {
        return 0;
    }

    fn magic(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, g: i32, h: i32, i: i32) -> bool {
        let mut x = [a, b, c, d, e, f, g, h, i];
        x.sort();
        if !x.eq(&[1, 2, 3, 4, 5, 6, 7, 8, 9]) {
            return false;
        }
        [
            a + b + c, d + e + f, g + h + i,
            a + d + g, b + e + h, c + f + i,
            a + e + i, c + e + g,
        ]
        .iter()
        .all(|&x| x == 15)
    }

    let mut ans = 0;
    for r in 0.._r - 2 {
        for c in 0.._c - 2 {
            if grid[r + 1][c + 1] != 5 {
                continue;
            }
            if magic(
                grid[r][c], grid[r][c + 1], grid[r][c + 2],
                grid[r + 1][c], grid[r + 1][c + 1], grid[r + 1][c + 2],
                grid[r + 2][c], grid[r + 2][c + 1], grid[r + 2][c + 2],
            ) {
                ans += 1;
            }
        }
    }
    ans
}
x